我有三个表项目,任务和标签。 Projects.id 是第一个表的主键,Tasks.id 是第二个表的主键,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')
);
下面的查询返回一些意外的结果。
$joins = array(
array('table' => 'project_tasks',
'alias' => 'Tasks',
'type' => 'inner',
'conditions' => array(
'Projects.id = Tasks.project_id'
)
),
array('table' => 'task_tags',
'alias' => 'Tags',
'type' => 'inner',
'conditions' => array(
'Tasks.id = Tags.task_id',
"Tags.tag_name = 'Driver'"
)
)
);
$data = $this->Projects->find('all', array(
'recursive' => 2,
'joins' => $joins
));
我得到的响应数据是
[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
(
[0] => Array
(
[id] => 2
[task_id] => 2
[tag_id] => 4444
[tag_name] => Doctor
)
)
)
看到我什至在没有标记为驱动程序的情况下获得任务。 如何排除没有标记驱动程序的任务?
我能够通过指定要选择的"字段"并设置"递归"=> -1 来修复它,如下所示。
$data = $this->Projects
->find('all', array(
'recursive' => -1,
'joins' => $joins,
'fields' => array(
'Projects.*',
'Tasks.*',
'Tags.*'
)
));