orWhere 的疑惑,做不到我需要的用法

看 Wiki 的时候发现下面的代码块

$matchThese = ['field' => 'value', 'another_field' => 'another_value', ...];
$orThose = ['yet_another_field' => 'yet_another_value', ...];
$results = User::where($matchThese)->get();
$results = User::where($matchThese)
    ->orWhere($orThose)
    ->get();

本来也是想实现这样的目标的

SELECT * FROM users
  WHERE (field = value AND another_field = another_value AND ...)
  OR (yet_another_field = yet_another_value AND ...)

但是实质上我测试的时候是这样的

User::where(['id' => 1, 'sex' => 0])->orWhere(['id' => 2, 'sex' => 1])->get();
SELECT * FROM `users` where (`id` = ? and `sex` = ?) or (`id` = ? or `sex` = ?)"

所有想问问除了原生的 SQL 语句还能怎么实现

《L05 电商实战》
从零开发一个电商项目,功能包括电商后台、商品 & SKU 管理、购物车、订单管理、支付宝支付、微信支付、订单退款流程、优惠券等
《L04 微信小程序从零到发布》
从小程序个人账户申请开始,带你一步步进行开发一个微信小程序,直到提交微信控制台上线发布。
最佳答案
Account::where(function ($q) {
            return $q->where('id', 1)->where('level', 10);
        })->orWhere(function ($q) {
            return $q->where('id', 2)->where('level', 20);
        })->toSql();
4年前 评论
Sanbo (楼主) 4年前
讨论数量: 3
Account::where(function ($q) {
            return $q->where('id', 1)->where('level', 10);
        })->orWhere(function ($q) {
            return $q->where('id', 2)->where('level', 20);
        })->toSql();
4年前 评论
Sanbo (楼主) 4年前
Account::where(function ($q) {
            return $q->where('id', 1)->where('level', 10);
        })->orWhere(function ($q) {
            return $q->where('id', 2)->where('level', 20);
        })->toSql();
4年前 评论
Sanbo (楼主) 4年前
allen9009

直接->whereRaw

4年前 评论

用到orwhere的地方,大都需要注意参数分组- -

4年前 评论
Sanbo (楼主) 4年前
aen233 (作者) 4年前
aen233 (作者) 4年前
Sanbo (楼主) 4年前

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!