有没有办法在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
不支持在何处关闭 最佳答案
您要查找的方法称为whereNested
,可从Illumintate\Database\Query\Builder
类获得。
不幸的是,传递给联接闭包的$join
参数的类型为Illumintate\Database\Query\JoinClause
,它只有4种方法来处理联接where
,orWhere
,whereNull
和whereNotNull
的where语句。
要进行此工作,您将需要使用DB::raw
。这应该工作:
$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(DB::raw('(`history`.`value_from` = 0 or `history`.`value_from` = "")'), '', '');
$join->where('history.value_to', '>', '0');
});
关于php - Eloquent 加入-封闭,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/28781489/