2014-09-22 51 views
0

我有2个模型被加入,但没有推出的ID,但与另一个领域。Cakephp模型忽略属于的条件

class Post extends AppModel{ 
    public $useDbConfig = 'test'; 
    public $actsAs = array('Containable'); 

    public $belongsTo= array(
     'User' => array(
      'className' => 'User', 
      'foreignKey' => false, 
      'type' => 'inner', 
      'conditions' => array('User.field = Post.field') 
    )); 
} 

但是cakephp没有正确连接2个模型。对于每个帖子,它只是给第一个用户(用户ID为1)。当我检查SQL语句时,用户声明如下:

​​

任何想法为什么这不起作用? 我也尝试手动加入模型:

$this->paginate = array(
     'limit' => '15', 
     'joins' => array(
      'INNER JOIN users User ON (User.field = Post.field)' 
     ) 
    ); 

    $posts= $this->paginate('Post'); 

任何想法?

编辑

我完全忘了提,这两个表是在不同的数据库。也许有问题。但到目前为止,我在连接不同数据库的表格时没有问题。

编辑

我错了关于加盟,使我改变它“属于关联”到“hasOne”,因为一个帖子只能由一个用户写入。但仍然没有改变。

+0

可以显示你想加入的模型吗? – 2014-09-22 15:18:06

+0

上面显示了后期模型。你需要什么用户模型?我没有更改用户模型。 – MrSmith 2014-09-22 15:22:22

+0

显示'find'语句。你显示的SQL语句有什么问题? – AgRizzo 2014-09-22 15:35:02

回答

0

我找到了解决办法,虽然我不明白为什么其他人将无法正常工作。我把

$this->Post->primaryKey = 'field'; 

$posts= $this->paginate('Post'); 

的权利,现在,它的工作原理。任何人都可以告诉我为什么其他方式不起作用?

0

可以使用foreignKey参数任何领域,不一定是id

型号:

public $belongsTo = array(
    'User' => array(
     'className' => 'User', 
     'foreignKey' => 'some_user_field' 
    ) 
); 

用户型号:

public $hasMany = array (
    'Post' => array (
     'className' => 'Post', 
     'foreignKey' => 'some_user_field', 
     'dependent' => true 
    ) 
); 

按照book

遵循CakePHP约定并不是强制性的。您可以轻松地使用 重写关联定义中的任何foreignKey。尽管如此,坚持约定会使您的代码重复性更低,更易于阅读和维护。

否则,手动进行joins

$this->paginate = array(
    'limit' => '15', 
    'joins' => array(
     array(
      'table' => 'users', 
      'alias' => 'User', 
      'type' => 'inner', 
      'conditions' => array('User.field = Post.field') 
     ) 
    ) 
); 
+0

没有可悲的是,cakephp不是那么开放。外键意味着另一个表的id将与当前的表外键连接。 – MrSmith 2014-09-22 15:35:22

+0

好吧,我现在明白了你没有使用外键,所以我最初做了这个参考。无论如何,我提出了参数'连接'的建议。 – 2014-09-22 15:52:39

+0

不,它不工作。如果我打印出数据,它只会显示后期数据,但不包含有关用户的信息。 – MrSmith 2014-09-23 07:11:42