我有两个桌子,项目和出价。
项目hasMany(投标);
表项
表标
现在我要展示每个项目的最高出价。
这是我的密码
$data = PostItem::with([
'bids' => function($query) {
$query->orderBy('new_bid','desc')->get();
}
])
->get();但问题是,它将采取所有的出价。
但是如果我用这个代码
$data = PostItem::with([
'bids' => function($query) {
$query->orderBy('new_bid','desc')->take(1);
}
])
->get();它将只需要一个最新的出价,不要采取每个项目的最新出价。
如何做好呢?
提前感谢
发布于 2016-10-30 12:50:25
将limit()添加到关系中:
public function highestBids()
{
return $this->hasMany('App\Bid')->orderBy('new_bid', 'desc')->limit(1);
}然后得到最高的出价:
$data = PostItem::with('highestBids')->get();发布于 2016-10-30 12:58:40
您可以将查询写成:
$items = PostItem::with(['bids' => function($query){
$query->orderBy('new_bid','desc');
}])
->get();现在每件物品的最高标价是:
foreach ($items as $item) {
$highest_bid = $item->bids->first(); // highest bids of $item
if($highest_bid) {
$new_bid = $item->new_bid;
}
}发布于 2016-10-30 14:00:17
我有答案,但可能不是最好的答案。
因此,我仍然使用我的第一个查询,然后在视图中使用@foreach。因为我已经排序的最高出价第一,所以我添加了@break打破外汇,这样它就不会循环所有的结果。
但我相信还有更好的方法
https://stackoverflow.com/questions/40329225
复制相似问题