我们可以在laravel中使用多级逻辑分组吗?



我正在寻找在laravel查询

select * from `itrs` 
where (
  (
    `master_type_id` = ? 
    or `master_type_id` = ?
  ) 
  or `due_date` < ?
) 
and `assigned_to` = ?

但是正在查询

select * from `itrs` 
where (
  `master_type_id` = ? 
  or `master_type_id` = ? 
  and `due_date` < ?
) 
and `assigned_to` = ?

从下面的代码

$ItrDays = Itr::where(function($q) {
    $q->where('master_type_id', 'Urgent ITR')
      ->orWhere('master_type_id', 'One time ITR');
})->orWhere(function($q) {
    $q->where('due_date', '<', Carbon::now()->addDays(10));
});
    
$ItrDays->when($admin == 0, function ($q) {
    return $q->where('assigned_to',Auth()->user()->id);
});
dd($admin . $ItrDays->toSql());

那么多级分组是可能的吗?在laravel文档中没有任何参考,所以如果有专家知道的话。注意:它是Laravel 8.

提前感谢。

有了解决方案,我们可以在其他闭包中使用闭包,如下所示。

张贴答案,如果它帮助任何人。

$ItrDaysList = Itr::where(function ($q) {
                        $q->where('due_date', '<', Carbon::now()->addDays(10))
                            ->orWhere(function($q2){
                                $q2->where('master_type_id', 'Urgent ITR')
                                    ->orWhere('master_type_id', 'One time ITR');
                            });
                    });
                $ItrDaysList->when($admin == 0, function ($q) {
                            return $q->where('assigned_to',Auth()->user()->id);
                        });
                $ItrDaysList = $ItrDaysList->get();

最新更新