Laravel 5.7雄辩的查询具有多个wheres和whereNotIn

时间:2018-10-09 19:20:00

标签: laravel postgresql laravel-5 orm eloquent

我正在尝试执行一个查询,该查询基于与两个可能的列匹配的用户ID和与两个值不匹配的工作流状态获取数据集。我的尝试在这里:

$usersBugs = Bug::where('assigned_user_id', $user->id)
                ->orWhere('reported_by', $user->id)
                ->whereNotIn('workflow_state', ['closed', 'rejected'])
                ->get();

它返回带有拒绝的workflow_state的“错误”。我猜它正在执行whereNotIn作为或?我将如何重构它以执行该错误不能同时处于两种状态(无论如何)并且它可以与assigned_user_idreport_by匹配的状态。我尝试使用whereNotIn进行引导:

$usersBugs = Bug::whereNotIn('workflow_state', ['closed', 'rejected'])
                ->where('assigned_user_id', $user->id)
                ->orWhere('reported_by', $user->id)
                ->get();

无论采用哪种方式,它都会基于assigned_user_id返回匹配的错误,尽管工作流状态被拒绝。

2 个答案:

答案 0 :(得分:2)

您可以尝试以下方法:

$model->whereNotIn(...)->where(function($query) use ($user) {
   $query->where('assigned_user_id', $user->id)->orWhere('reported_by', $user->id);
})->get();

答案 1 :(得分:1)

您应该将where .. orWhere包装到其他闭合符中:

$usersBugs = Bug::where(function($q) {
  $q->where('assigned_user_id', $user->id)
                    ->orWhere('reported_by', $user->id)
})->whereNotIn('workflow_state', ['closed', 'rejected'])->get();