需求:
需要用到小括号括起来的内部用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`='未审核' )");
说到底还是语法糖和原生的区别,新项目还是用官方的闭包方式吧,拥抱新的生态慢慢就习惯了!
声明:本站所有文章,如无特殊说明或标注,均为本站原创发布。任何个人或组织,在未征得本站同意时,禁止复制、盗用、采集、发布本站内容到任何网站、书籍等各类媒体平台。如若本站内容侵犯了原著者的合法权益,可联系我们进行处理。