首先,我试着看看这个,但我不能得到解决方案的工作,因为它涉及数据透视表,我的没有。我的大脑无法从那个解决方案中抽象出解决方案。
我有这样的查询:
$orderLines = PurchasingOrderLine::where('season_id', '=', $seasonRecID)
->with('factory')
->with('purchasingFactoryDates.milestone')
->with('divergedColors.purchasingColorDates.milestone')
->get();
所以这是相当大的关系。
我想按milestone
的"number"属性对purchasingFactoryDates
进行排序。
以下是该查询的JSON响应示例(示例).
{
id: 1,
season_id: 258,
factory_id: 38,
archived: 0,
created_at: "2016-10-03 00:00:00",
updated_at: "2016-10-04 00:00:00",
factory: {
ID: 38,
name: "testfac",
address: "testadrr",
postCode: "",
city: "Foo",
countryID: 27,
podID: 2,
warehouse_id: 3,
paymentTermID: 11,
factoryCode: "Bazz",
active: 1
},
purchasing_factory_dates: [
{
id: 1,
purchasing_order_line_id: 1,
milestone_id: 1,
milestone_date: "1993-10-22 19:15:51",
milestone_status_id: 2,
created_at: "2016-10-04 07:38:30",
updated_at: "2016-10-18 19:15:51",
milestone: {
id: 1,
name: "test1",
description: null,
number: 1,
created_at: "-0001-11-30 00:00:00",
updated_at: "-0001-11-30 00:00:00"
}
},
.........
有什么好主意吗?我不希望整个关系是由Milestone.number
排序,只有purchasingFactoryDates
。
最简单的方法是像这样连接查询:
$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::with('purchasingFactoryDates'=>function($query)
{
$query->with(['milestone'=>function($query)
{
$query->orderBy('number');
}]);
}]);
我认为这可能是你想要的,它与你正在看的另一个答案非常接近。
$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();