我正在尝试执行一个查询,该查询基于与两个可能的列匹配的用户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_id
或report_by
匹配的状态。我尝试使用whereNotIn进行引导:
$usersBugs = Bug::whereNotIn('workflow_state', ['closed', 'rejected'])
->where('assigned_user_id', $user->id)
->orWhere('reported_by', $user->id)
->get();
无论采用哪种方式,它都会基于assigned_user_id
返回匹配的错误,尽管工作流状态被拒绝。
答案 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();