CakePHP模型关联,条件不起作用

时间:2016-03-18 09:39:20

标签: php mysql cakephp

我有三个表项目,任务和标签。 Projects.id是第一个表的主键,Tasks.id是第二个表的PK,Tags.id是第三个表的PK。

项目模型代码段

public $primaryKey = 'id';
public $hasMany = array(
    'Tasks' => array('className' => 'Tasks','foreignKey' => 'project_id')
); 

任务型号代码段

public $primaryKey = 'id';
public $hasMany = array(
    'Tags' => array('className' => 'Tags','foreignKey' => 'task_id')
);

以下查询会返回一些意外结果。

$data = $this->Projects->find('all', array(
            'recursive' => 2,
            'contain' => array(
                'Tags' => array(
                    'conditions' => array('Tags.tag_name =' => "Driver")
                 )
            )
 ));

我得到的回复数据是

 [Projects] => Array
                (
                    [id] => 1
                    [project_id] => 1234
                    [project_name] => XYZ
                )

            [Tasks] => Array
                (
                    [0] => Array
                        (
                            [id] => 1
                            [project_id] => 1
                            [task_id] => 12
                            [task_name] => task1
                            [Tags] => Array
                                (
                                    [0] => Array
                                        (
                                            [id] => 1
                                            [task_id] => 1
                                            [tag_id] => 3444
                                            [tag_name] => Driver
                                        )

                                )

                        )

                    [1] => Array
                        (
                            [id] => 2
                            [project_id] => 1
                            [task_id] => 343242
                            [task_name] => task2


                            [Tags] => Array
                                (
                                )

                        )

看到我甚至没有标记作为驱动程序的任务。如何在没有标记驱动程序的情况下排除任务?

换句话说,task1确实有Tag作为驱动程序,所以应该在那里。但是task2没有任何标记,即使这样,返回数据也包含task2。如何解决?

1 个答案:

答案 0 :(得分:0)

您不能根据子模型的条件限制主模型或父模型的结果,因为“包含”实际上会为每个包含模型创建单独的查询。

要获得正确的结果,您必须使用join。