需求:

需要用到小括号括起来的内部用OR连接的查询条件

 SELECT * FROM table_name WHERE 1 AND (field1 = condition1 OR fileld1 = condition2)

解决:

官方文档翻了半天,想用官方数组方式解决(答案无解)侵入修改源码就算了。

思路:把答案定义为“复杂的查询”,心中豁然开朗!

样例:

// 查询条件初始化
$where = [
    ['status', '=', 1],
];

$whereOr = [
    ['type', '=', '已审核'],
    ['type', '=', '未审核'],
];

// 1、官方正统:
Db::name('table')->where($where)->where(function ($query) use ($whereOr) { $query->whereOr($whereOr); })->buildSql();

// 2、投机取巧:
Db::name('table')->where($where)->whereExp('', "`type`=? OR `type`=?", ['已审核', '未审核'], 'AND')->buildSql();

// 3、大道至简:
Db::name('table')->where($where)->whereRaw("`type`=? OR `type`=?", ['已审核', '未审核'], 'AND')->fetchSql()->count();
Db::name('table')->where($where)->whereRaw("`field1`=:condition1 OR `field2`=:condition2", ['condition1'=>'value1', 'condition2'=>'value2'], 'AND')->fetchSql()->count();

// 4、殊途同归
$result = Db::query(" SELECT COUNT(*) AS think_count FROM `table_name` WHERE `status` = 1 AND ( `type`='已审核' OR `type`='未审核' )");


说到底还是语法糖和原生的区别,新项目还是用官方的闭包方式吧,拥抱新的生态慢慢就习惯了!

 

声明:本站所有文章,如无特殊说明或标注,均为本站原创发布。任何个人或组织,在未征得本站同意时,禁止复制、盗用、采集、发布本站内容到任何网站、书籍等各类媒体平台。如若本站内容侵犯了原著者的合法权益,可联系我们进行处理。