如何将指定SQL转换为CakePHP 2.8控制器可正常运行的查询语句
CakePHP 2.8 对应查询正确写法
原生SQL中AND运算优先级高于OR,实际生效逻辑为匹配两个条件组的任意一个:
- 组1:
app_code = 'XuS5II'且acc_id = 89 - 组2:
app_code = 0且acc_id = 0
之前查询不生效的常见原因是没有做条件分组,把所有条件平铺后CakePHP会默认用AND拼接,导致逻辑错误。
控制器中可直接运行的代码如下:
// 如果当前控制器没有关联该模型,先执行加载:$this->loadModel('AdsPartnerWise'); $adPartnerWises = $this->AdsPartnerWise->find('all', array( 'conditions' => array( 'OR' => array( // 第一组匹配条件 array( 'app_code' => 'XuS5II', 'acc_id' => 89 ), // 第二组匹配条件 array( 'app_code' => 0, 'acc_id' => 0 ) ) ) ));
注意不要把四个条件平铺在conditions下,也不要把OR下的条件和外层条件混写,否则会因为CakePHP默认的AND拼接规则,生成不符合预期的WHERE逻辑。
验证提示:如果需要确认生成的SQL是否符合预期,可以开启debug模式后查看SQL日志,或者调用
$this->AdsPartnerWise->getDataSource()->getLog()打印执行的SQL语句核对。
内容的提问来源于stack exchange,提问作者chunara vivek
相关产品推荐
相关产品推荐

