有没有办法在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种方法来处理联接whereorWherewhereNullwhereNotNull的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/

10-14 11:54