Так что мне нужно найти все 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();
Вам необходимо использовать:
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 < ?)
Других решений пока нет …