【发布时间】:2015-05-01 03:13:22
【问题描述】:
有什么方法可以在 Eloquent 的 join 子句中使用 where 的闭包?
我想做的是:
$model = $model->leftJoin('history', function ($join) {
$join->on('history.record_id', '=', 'work_order.work_order_id');
$join->where('history.tablename', '=', 'test');
$join->where('history.columnname', '=', 'column');
$join->where(function ($q) {
$q->where('history.value_from', '=', '0')
->orWhere('history.value_from', '=', '');
});
$join->where('history.value_to', '>', '0');
});
但显然是部分:
$join->where(function ($q) {
$q->where('history.value_from', '=', '0')
->orWhere('history.value_from', '=', '');
});
不起作用,因为 JoinClause 不支持 where 闭包
【问题讨论】:
-
为什么要在那里使用闭包?你试图用它生成什么查询?会是 where 子查询吗?
-
或者像这样将 where 语句组合在一起:
... AND (history.value_from = 0 OR history.value_from = "") ...? -
@Bogdan 我想使用类似
SELECT * FROM work_order LEFT JOIN history ON history.record_id = work_order.work_order_id AND history.tablename = 'test' AND history.columnname = 'column' AND (history.value_from = 0 OR history_value_from = '') AND history_value_to > 0 ...的东西来代替...(最后)可能是其他连接或WHERE 子句。目前,作为解决方法,我为此查询创建了关系,但是这样运行 2 个查询而不是一个 -
一个可能的(hacky)解决方法在这里:github.com/laravel/framework/issues/4412。
标签: php laravel eloquent laravel-5 query-builder