2016-11-29 6 views
1

Laravel Eloquentで最低価格のオブジェクトを取得するより良い方法はありますか?各製品には複数のticketTypesがあり、各ticketTypeには複数の価格が設定できます。LaravelでEloquentの最低価格を取得

public function includeLowestPrice(Product $product) 
    { 

    $lowestPriceTicket = null; 

    foreach ($product->ticketTypes()->hasActivePrices()->get() as $type) { 
     foreach ($type->prices()->get() as $ticketPrice) { 
      if (!$lowestPriceTicket || $ticketPrice->value < $lowestPriceTicket->value) { 
       $lowestPriceTicket = $ticketPrice; 
      } 
     } 
    } 

    return $lowestPriceTicket ? $this->item($lowestPriceTicket, new TicketPriceTransformer()) : null; 
    } 

答えて

5
$product->ticketTypes()->hasActivePrices()->orderBy('price')‌​->first() 

価格はフィールドの名前で、hasActivePricesが雄弁クエリビルダを返すクエリの範囲であると仮定すると、最も低い価格の製品を取得します。

first()は、コレクションの代わりに最初のモデルを返し、orderBy()は、クエリを並べ替えます

関連する問題