4 回答

TA贡献1842条经验 获得超12个赞
你可以这样做
Model::where('a', '1')
->where('b', '2')
->where(function ($q) {
$q->where('c', '3')->orWhere('c', '4');
})
->where(function ($q) {
$q->where('d', '5')->orWhere('d', '5');
})->get();

TA贡献2051条经验 获得超10个赞
如果我收到您的问题,那么这张收据适合您:
$result = DB::table('table')
->where('a', 1)
->where('b', 2)
->where(function($query) {
$query->where('c', 3)
->orWhere('c', 4)
})
->where(function($query) {
$query->where('d', 5)
->orWhere('d', 6)
->get();

TA贡献1801条经验 获得超16个赞
像这样的事情应该可以解决问题:
Model::where([
['a', '=', 1],
['b', '=', 2],
[['c', '=', 3], 'OR', ['c', '=', 4]],
[['d', '=', 5], 'OR', ['d', '=', 6]]
]);

TA贡献1811条经验 获得超6个赞
既然你已经改进了你的问题。以下是实现这一目标的方法。
没有测试过。像这样的事情怎么样?
$ands = [['a', '=', 1], ['b', '=', 2], ...];
$query = Model::query();
foreach($and as $and) {
$query = $query->where($and);
}
if($cond1) $ors['c'] = [3, 4, ...];
if($cond2) $ors['d'] = [5, 6, ...];
if($cond3) $ors['e'] = [7, 8, ...];
...
foreach($ors as $key => $or) {
$query = $query->where(function($q) use ($key, $or) {
$q->whereIn($key,$or);
});
}
$query->get();
- 4 回答
- 0 关注
- 290 浏览
添加回答
举报