PHP   发布时间:2022-04-04  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了如何在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'
              )
          )
     )
));

大佬总结

以上是大佬教程为你收集整理的如何在CakePHP中更改“加入”的顺序?全部内容,希望文章能够帮你解决如何在CakePHP中更改“加入”的顺序?所遇到的程序开发问题。

如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。
标签: