2017-10-16 17:37:40 1898次浏览 1条回答 0 悬赏 50 金钱

默认是and优先级高于or,但我想把or放到跟in同一级,and在下一级,要如何写

最佳答案

  • Jeen 发布于 2017-10-17 10:02 举报

    不太清楚你的使用场景,建议多结合自己项目的业务场景+yii2debug插件 或者 自行使用getRawSql方法进行调试

    这边提供一小段测试代码(其中的表名及字段名均无实际意义)

            $query = new \yii\db\Query();
            $sql1 = $query->from('test_table')->where([
                'OR',
                ['col1' => [1,2,3]],
                [
                    'AND',
                    ['col2' => 3],
                    ['like', 'col3', 'defg'],
                ]
            ])->createCommand()->getRawSql();
            var_dump($sql1);
            
            $sql2 = $query->from('test_table')->where([
                'in', 'col1', [1,2,3]
            ])->orWhere([
                'AND',
                ['col2' => 3],
                ['like', 'col3', 'defg'],
            ])->createCommand()->getRawSql();
            var_dump($sql2);
    

    执行结果

    #sql1
    SELECT * FROM `test_table` WHERE (`col1` IN (1, 2, 3)) OR ((`col2`=3) AND (`col3` LIKE '%defg%'))
    #sql2
    SELECT * FROM `test_table` WHERE (`col1` IN (1, 2, 3)) OR ((`col2`=3) AND (`col3` LIKE '%defg%'))
    

    顺便提下就是 AR查询条件的默认优先级,其实这个并没有所谓的默认优先级。查询条件的组合,取决于你的使用顺序。

    觉得很赞
    没有找到数据。
您需要登录后才可以回答。登录 | 立即注册
颜色
主管

颜色

注册时间:2017-04-27
最后登录:2017-12-23
在线时长:8小时12分
  • 粉丝1
  • 金钱530
  • 威望0
  • 积分610

热门问题