0

我正在尝试通过查询来获取记录,但情况是我必须在 laravel 中的当前表列和关系表列上都使用 order by。我试过这个

 $consignments = Consignment::where('delivery_run_id', $id)->whereIn('status', [
            'In Warehouse',
            'With On Forwarder',
            'In Transit (Warehouse->Delivery)',
            'Awaiting Pickup'
        ])->with(['consignment_run_sheet' => function ($query) {
            $query->orderBy('run_sheet_id');
        }])->orderBy('delivery_date', 'DESC')->get();
        $deliveryRuns = DeliveryRun::all();

我怎样才能实现它?

4

1 回答 1

0

它将以这种方式仅订购关系项目。解决方案是使用子查询或联接。如果假设 consignment_run_sheet 关系的模态是 ConsignmentRunSheet 并且关系是 belongsTo,则使用子查询是这样的:

 $consignments = Consignment::where('delivery_run_id', $id)->whereIn('status', [
            'In Warehouse',
            'With On Forwarder',
            'In Transit (Warehouse->Delivery)',
            'Awaiting Pickup'
        ])->with('consignment_run_sheet')
        ->orderBy(ConsignmentRunSheet::select('delivery_date')
                  ->whereColumn('consignments.id', 'consignment_run_sheet.consignment_id'), 'DESC')
        ->get()

来源: https ://reinink.ca/articles/ordering-database-queries-by-relationship-columns-in-laravel

于 2020-07-09T14:00:46.640 回答