[英]Laravel order by a nested eager load relationship
首先,我试着看看这个 ,但我无法使解决方案工作,因为它涉及到数据透视表,而我的工作没有。 我的大脑无法从该解决方案中抽象出解决方案。
我有这个问题:
$orderLines = PurchasingOrderLine::where('season_id', '=', $seasonRecID)
->with('factory')
->with('purchasingFactoryDates.milestone')
->with('divergedColors.purchasingColorDates.milestone')
->get();
所以这是一个很大的关系。
我想那种purchasingFactoryDates
通过其milestone
的‘数量’属性。
以下是此查询的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();
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.