Laravel Eloquent комбинация построителя запросов

Так что мне нужно найти все ProductionTask тот belongTo определенный Operation если

  • где 'status', '<', 3
  • orWhere('expected_start', '>', $monday_date)

с реализацией orWhere колонка operation_id от красноречивых отношений с Operation игнорируется.

Что я должен делать?

Вот неисправный код:

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

1

Решение

Вам необходимо использовать:

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 < ?)
2

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]