如何在CakePHP中更改"连接"的顺序?

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连接将位于查询的末尾,那么查询就可以了.

那么,问题是如何改变连接的顺序?

ban*_*cer 5

最后我想出了如何做到这一点:

$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)