1

所以我需要找到所有ProductionTask确定belongToOperation如果

  • 在哪里'status', '<', 3
  • orWhere('expected_start', '>', $monday_date)

与执行orWhereoperation_id从雄辩的关系与Operation被忽略。

我该怎么办?

这是错误的代码:

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

1 回答 1

3

你需要使用:

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 < ?)
于 2015-12-23T14:35:43.293 回答