Laravel Eloquent 查询生成器组合

Laravel Eloquent query builder combination

所以我需要找到所有 ProductionTask belongTo 某些 Operation if

随着 orWhere 的实施,与 Operation 的 eloquent 关系中的列 operation_id 被忽略。

我该怎么办?

错误代码如下:

   return production\ProductionTask::where('operation_id', $operation->id)->where('status', '<', 3)->orWhere('expected_start', '>', $monday_date)->and('expected_end', '<', $sunday_date)->get();

您需要使用:

return production\ProductionTask::where('operation_id', $operation->id)
     ->where(function($q) use($monday_date) {
         $q->where('status', '<', 3)->orWhere('expected_start', '>', $monday_date);
     }->where('expected_end', '<', $sunday_date)->get();

对您的 where 条件进行分组。

使用它你将获得:

SELECT * FROM production_tasks WHERE operation_id = ? AND (status < 3 OR expected_start > ?) AND expected_end < ?

使用以前的方法你会得到这样的结果:

SELECT * FROM production_tasks WHERE operation_id = ? AND status < 3 OR expected_start > ? AND expected_end < ?

等于:

SELECT * FROM production_tasks WHERE (operation_id = ? AND status < 3) OR (expected_start > ? AND expected_end < ?)