我正在使用 Laravel 5.3 并尝试使用它的产品返回抢劫,只返回最新订单以及最新价格历史记录 。两个联接都不会返回任何内容,但如果我删除$q->latest()->first();
并将其替换为简单orderBy()
,我会得到所有结果。我的疑问是:
$data = $heist->with(['product'=> function($query) {
$query->with(['orders' => function($q) {
return $q->latest()->first();
}]);
$query->with(['price_history' => function($q) {
return $q->latest()->first();
}]);
}])->orderBy('completed_at', 'DESC')->orderBy('active', 'DESC')->get();
答案 0 :(得分:1)
调用first()与调用take(1) - > get()[0]相同; 这意味着将返回的金额限制为1并将其返回。你想要的只是限制部分。所以如果你改变first()来取(1)。
<强>更新强>
$data = $heist->with([
'product'=> function($query) {
$query->with(
[
'orders' => function($q) {
$q->latest()->take(1);
},
'price_history' => function($q) {
$q->latest()->take(1);
}
]
);
}
])->orderBy('completed_at', 'DESC')->orderBy('active', 'DESC')->get();
答案 1 :(得分:1)
正如评论中所讨论的,我认为最简单的方法是
$heists = $heist->with(['product'=> function($query) {
$query->with([
'orders' => function($q) {
return $q->orderBy('created_at', 'desc')->take(1)->get();
},
'price_history' => function($q) {
return $q->orderBy('created_at', 'desc')->take(1)->get();
}
]);
}])->orderBy('completed_at', 'desc')->orderBy('active', 'desc')->get();
希望这会有所帮助:)