当关系存在时,CakePHP连接表

时间:2011-04-27 17:27:48

标签: php activerecord cakephp

我有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表

干杯

2 个答案:

答案 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来获取用户数据。

当然这很昂贵,但在这种情况下这是很自然的事情。