laravel从每个帖子获得最后一次出价

时间:2016-10-30 12:45:13

标签: php mysql laravel laravel-5 laravel-5.3

我有2张桌子,物品和投标。

项目hasMany(出价);

表项目

  • ID-1
  • ID-2
  • ID-3

表格出价

  • id-1 | 3
  • id-1 | 4
  • id-2 | 2
  • id-2 | 5
  • id-3 | 4
  • id-3 | 6

现在我想显示每个项目的最高出价。

这是我的代码

 $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();

最新出价只需1次,不要对每件商品进行最新出价。

如何正确地做到这一点?

提前致谢

4 个答案:

答案 0 :(得分:1)

limit()添加到关系:

public function highestBids()
{
    return $this->hasMany('App\Bid')->orderBy('new_bid', 'desc')->limit(1);
}

然后获得最高出价:

$data = PostItem::with('highestBids')->get();

答案 1 :(得分:0)

您可以将查询编写为:

 $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;
    }
}

答案 2 :(得分:0)

您可以使用distinct()方法获取唯一记录。请尝试以下查询。

$items = PostItem::with(['bids' => function($query){
             $query->distinct()
                ->select('item_id')
                ->orderBy('new_bid','desc')
                ->groupBy('item_id')
                ->get();
         }])
         ->get();

答案 3 :(得分:0)

我有答案,但可能不是最佳答案。

所以我仍然使用我的第一个查询,然后在视图中我正在使用@foreach。 因为我已经先排序了最高出价,所以我添加@break来打破foreach所以它不会循环所有结果。

但我相信有更好的方法可以做到这一点