Laravel Eloquent 查询生成器组合
Laravel Eloquent query builder combination
所以我需要找到所有 ProductionTask
belongTo
某些 Operation
if
- 其中
'status', '<', 3
orWhere('expected_start', '>', $monday_date)
随着 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 < ?)
所以我需要找到所有 ProductionTask
belongTo
某些 Operation
if
- 其中
'status', '<', 3
orWhere('expected_start', '>', $monday_date)
随着 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 < ?)