编程语言
首页 > 编程语言> > 如何在CakePHP中更改“加入”的顺序?

如何在CakePHP中更改“加入”的顺序?

作者:互联网

我有连接顺序的问题.类似的问题是另一个问题Manipulating Order of JOINS in CakePHP.答案是使用可容纳行为.就我而言,这是不可接受的,因为我有更深的关联,而containable会生成太多查询. 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'
          )
     ))
));

这里的问题是,cake会生成多个联接,但是LevelThree表的联接是在LevelTwo表的联接之前完成的,并且会引发SQL错误“ on子句中的未知列’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'
              )
          )
     )
));

标签:join,cakephp,associations,php,model
来源: https://codeday.me/bug/20191105/1998478.html