2015-12-23 6 views
0

Поэтому мне нужно найти все ProductionTask что belongTo определенный Operation еслиLaravel Eloquent сочетание конструктор запросов

  • где '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 < ?) 
Смежные вопросы