根据父模型查找条件查询

时间:2012-08-11 05:59:38

标签: php mysql cakephp associations

出于这个问题的目的,这是关联树(所有->表示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条目过滤结果。

我该怎么办?

1 个答案:

答案 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,因为它当前会创建多个查询而不是连接。