出于这个问题的目的,这是关联树(所有->
的意思是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
条目来过滤结果。
我该怎么办?
简单如下:
<?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,因为它当前会创建多个查询而不是连接。