我有两个模型已加入,但没有加入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"因为帖子只能由一个用户写。但仍然没有变化。
答案 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');
现在它有效。谁能告诉我为什么其他方法不起作用?