Cakephp Model忽略belongsTo中的条件

时间:2014-09-22 15:12:13

标签: php mysql cakephp

我有两个模型已加入,但没有加入id,而是另一个字段。

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语句时,User语句如下:

SELECT `User`.`id`, `User`.`group_id`... FROM `users` AS `User` WHERE 1 = 1

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

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

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

有什么想法吗?

修改

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

修改

我对连接错了所以我从" belongsTo" to" hasOne"因为帖子只能由一个用户写。但仍然没有变化。

2 个答案:

答案 0 :(得分: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')
        )
    ) 
);

答案 1 :(得分:0)

我找到了一个解决方案,虽然我不明白为什么其他人不会工作。我把

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

之前

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

现在它有效。谁能告诉我为什么其他方法不起作用?