2016-10-30 28 views
1

我有2個表格,物品和出價。laravel從每個帖子獲取最後一個出價

Items hasMany(Bid);

表項

  • 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最新報價,不採取每個項目的最新報價。

如何正確地做到這一點?

在此先感謝

回答

1

添加limit()的關係:

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

,然後得到的最高競價:

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

的結果是相同的與我的第二個查詢 – reeouw

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; 
    } 
} 
+0

此查詢是正確的,我可以得到最高的出價,但它會導致整個數組,如果寫$本期特價貨品> bids-> first() - > new_bid它會出錯 – reeouw

+0

可以顯示dd($ items)嗎? –

+0

檢查更新的答案。它可能有幫助。 –

0

您可以使用distinct()方法來獲取唯一的記錄。嘗試下面的查詢。

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

這隻會導致一個項目,但我想顯示所有項目的出價。因此,我認爲我的「出價」查詢中缺少一些信息 – reeouw

+0

請參閱我的更新回答 – smartrahat

+0

我曾嘗試使用不同的功能,但它使得 「語法錯誤或訪問衝突:1055表達式」 – reeouw

0

我有答案,但它可能不是最好的答案。

所以我仍然與我的第一個查詢,然後在視圖中我使用@foreach。 ,因爲我已經先排名最高出價,所以我添加了@break來打破foreach,因此它不會循環所有結果。

,但我相信有更好的方式來做到這一點

相關問題