出于这个问题的目的,这是关联树(所有->
表示hasMany
),所有数据库结构代码都遵循CakePHP约定。
Forum -> Section (forum_id) -> Topic (section_id) -> Reply (topic_id)
我想在某些条件下运行$this->Reply->find
查询,我希望返回的$data["Reply"]
数组只返回它们属于forum_id=X
的回复。
例如,我在某些条件下运行$this->Reply->find
(这些无关紧要),它会返回两个不同父母的结果,当你一直向上,直到达到Forum.id
(或Section.forum_id
),它们在forum_id
中有所不同。
我想要的是过滤结果,使它们属于某个forum_id
。由于forum_id
不是Reply
模型本身的字段,而是Section
(这是两个“层”),我不能使用conditions
条目过滤结果。
我该怎么办?
答案 0 :(得分:2)
这很简单:
<?php
$this->Reply->find('all', array(
'joins' => array(
Reply::joinLeft('Topic'),
Topic::joinLeft('Section'),
Section::joinLeft('Forum'),
),
'conditions' => array('Forum.id' => $forumId),
));
https://github.com/tigrang/EasyJoin - 这将决定模型之间的关系并为您创建连接数组。
如果您不想使用该插件,则必须手动指定连接数组或重新绑定模型以便能够使用Containable,因为它当前会创建多个查询而不是连接。