Php 通过嵌套的渴望加载关系来调整订单

Php 通过嵌套的渴望加载关系来调整订单,php,laravel,laravel-5,Php,Laravel,Laravel 5,首先,我试着查看,但我无法得到有效的解决方案,因为它涉及到透视表,而我的没有。我的大脑无法从那个解决方案中提取出解决方案 我有一个疑问: $orderLines = PurchasingOrderLine::where('season_id', '=', $seasonRecID) ->with('factory') ->with('purchasingFactoryDates.milestone') ->with('diverg

首先,我试着查看,但我无法得到有效的解决方案,因为它涉及到透视表,而我的没有。我的大脑无法从那个解决方案中提取出解决方案

我有一个疑问:

$orderLines = PurchasingOrderLine::where('season_id', '=', $seasonRecID)
        ->with('factory')
        ->with('purchasingFactoryDates.milestone')
        ->with('divergedColors.purchasingColorDates.milestone')
        ->get();
所以这是一段相当大的关系

我想按
里程碑
的“number”属性对
购买工厂日期
进行排序

下面是此查询的JSON响应示例(示例)

有什么办法吗?我不希望整个关系按
里程碑.number
排序,只希望是
购买工厂日期


最简单的方法是像这样连接查询:

$orderLines = PurchasingOrderLine::where('season_id', '=', $seasonRecID)
    ->select('purchasing_order_lines.*')
    ->join('purchasing_factory_dates', 'purchasing_factory_dates.purchasing_order_line_id', '=', 'purchasing_order_lines.id')
    ->join('milestone', 'purchasing_factory_dates.milestone_id', '=', 'milestone.id')
    ->with('factory')
    ->with('purchasingFactoryDates.milestone')
    ->with('divergedColors.purchasingColorDates.milestone')
    ->groupBy('purchasing_order_lines.id')
    ->orderBy('milestone.number')
    ->get();

我认为这很可能是你想要的,与你看到的另一个答案很接近

$orderLines = PurchasingOrderLine::where('season_id', '=', $seasonRecID)
    ->with('factory')
    ->with(['purchasingFactoryDates' => function($q) {
        $q->select('purchasingFactoryDates.*')->join('milestone', 'purchasingFactoryDates.milestone_id', '=', 'milestone.id')->orderBy('milestone.number');
    }, 'purchasingFactoryDates.milestone'])
    ->with('divergedColors.purchasingColorDates.milestone')
    ->get();

这是不是可以放在我调用的所有其他“with”方法的中间?好吧,但这只会在关系中排序Millestone而不是mileston编号的所有记录我认为你必须使用连接:这是我到目前为止最喜欢的解决方案,因为它仍然会带来里程碑和工厂日期。谢谢你的解决方案,等等。这不是按里程碑排序的。编号?我有1,3,10,2作为里程碑编号:(它似乎仍然在采购工厂日期之后排序。id这不是按里程碑编号排序。对于我来说,这仍然是按采购工厂日期id排序。如果我删除带有('purchasingFactoryDates.milestone')的
->,这将正确排序)
。不知何故,这会覆盖排序?因此,从这个意义上说,我没有得到结果中的里程碑,但采购订单行的排序正确吗?
$orderLines = PurchasingOrderLine::where('season_id', '=', $seasonRecID)
    ->select('purchasing_order_lines.*')
    ->join('purchasing_factory_dates', 'purchasing_factory_dates.purchasing_order_line_id', '=', 'purchasing_order_lines.id')
    ->join('milestone', 'purchasing_factory_dates.milestone_id', '=', 'milestone.id')
    ->with('factory')
    ->with('purchasingFactoryDates.milestone')
    ->with('divergedColors.purchasingColorDates.milestone')
    ->groupBy('purchasing_order_lines.id')
    ->orderBy('milestone.number')
    ->get();
$orderLines = PurchasingOrderLine::where('season_id', '=', $seasonRecID)
    ->with('factory')
    ->with(['purchasingFactoryDates' => function($q) {
        $q->select('purchasingFactoryDates.*')->join('milestone', 'purchasingFactoryDates.milestone_id', '=', 'milestone.id')->orderBy('milestone.number');
    }, 'purchasingFactoryDates.milestone'])
    ->with('divergedColors.purchasingColorDates.milestone')
    ->get();