ban*_*cer 3 php cakephp join model associations
我有连接序列的问题.类似的问题是在CakePHP中操纵JOINS顺序的另一个问题.答案是使用可包含的行为.在我的情况下,这是不可接受的,因为我有更深的关联和可包含产生太多的查询.Containable不会为三个级别的关联生成连接.它为第二级表中的每个条目生成其他查询.
我的查询是:
$this->LevelOne->find('all', array(
'joins' => array(array(
'table' => 'level_three',
'alias' => 'LevelThree',
'type' => 'LEFT',
'conditions' => array(
'LevelThree.id = LevelTwo.level_three_field_id'
)
))
));
Run Code Online (Sandbox Code Playgroud)
这里的问题是cake生成多个连接,但LevelThree表的连接在LevelTwo表的连接之前完成,并且在'on子句'中引发SQL错误"Unknown column'LevelTwo.level_three_field_id'".如果在所有LevelTwo加入后,LevelThree连接将位于查询的末尾,那么查询就可以了.
那么,问题是如何改变连接的顺序?
最后我想出了如何做到这一点:
$this->LevelOne->unbindModel(array('belongsTo' => array('LevelTwo')));
$this->LevelOne->find('all', array(
'joins' => array(
array(
'table' => 'level_two',
'alias' => 'LevelTwo',
'type' => 'LEFT',
'conditions' => array(
'LevelTwo.id = LevelOne.level_two_field_id'
)
),
array(
'table' => 'level_three',
'alias' => 'LevelThree',
'type' => 'LEFT',
'conditions' => array(
'LevelThree.id = LevelTwo.level_three_field_id'
)
)
)
));
Run Code Online (Sandbox Code Playgroud)