我有Message
模型 hasMany Librarian
。
我遇到的问题是,当我尝试将表格加入Librarian
表格时,该表格尚未加入 - 即我创建的联接在关系之前出现加入已创建。
$this->Message->find('all', array(
'joins' => array(
array(
'table' => 'users',
'alias' => 'User',
'conditions' => array('User.id = Librarian.id')
)
)
));
这会沿着以下行生成查询:
SELECT `Message`.`id`, `Message`.`librarian_id`,
`Message`.`Librarian`.`id`, `Librarian`.`user_id`
FROM `contact_messages` AS `Message`
INNER JOIN users AS `User` ON (`User`.`id` = `Librarian`.`user_id`)
LEFT JOIN `librarians` AS `Librarian`
ON (`Message`.`librarian_id` = `Librarian`.`id`)
WHERE `Message`.`id` = 3
我收到错误
'on clause'
中的未知列'Librarian.user_id'
如果已经包含在构建查询中,我如何加入hasMany表?
干杯
答案 0 :(得分:1)
我倾向于通过实际将关系绑定到代码中来解决这个问题。这是一个hacky方法,很老,非常1.2。
这是使用bindModel()
,您可以在此处阅读http://book.cakephp.org/view/3/The-Manual#!/view/78/Associations-Linking-Models-Together
模型方法的文档在这里,http://api12.cakephp.org/class/model#method-ModelbindModel
这个想法基本上是你可以暂时将两个模型绑定在一起,即使没有关系,或者他们有一个遥远的关系。我做到了,它确实有效。我在某个地方有一些代码,但不能亲自动手。
此外,如果您正在使用更新的东西,请务必查看Containable()
,因为据我所知,它包含了更多的模型绑定。 http://book.cakephp.org/#!/view/1323/Containable
答案 1 :(得分:0)
我不确定自己解释得有多好。
我应该将问题分解为确切的关系:
消息 hasMany 图书馆员
图书馆员 属于 用户
这意味着我可以设置recursive = 2
来获取用户数据。
当然这很昂贵,但在这种情况下这是很自然的事情。