2017-01-20 4 views
1

私を助けることができれば、すべてのlaravelの人、お願いします。私はPostgreSQLとしてDBを持っています。Laravelの関係データが必要です

食べ物::私は以下のように4台持っているID、名前を

利点:ID、名前

Benefit_rating:ID、名前

Food_benefit:同上、food_id、Benefit_id、Benefit_rating_id

食べ物のIDがわかっていて、食べ物から食べ物の名前(Food.name)を取り出し、すべての食べ物の利点(benefit_rating.name)とその評価(Benefit_rating.name)を列挙すると、クエリが1つ必要です。

ここで、Food_benefitには、食品に関連する食品、利益および便益評価の関係があることを理解してください。

ピボットテーブルがそのように設計されているので、多少の関係を持つことはできません[Cant alter design]。

どのような生のクエリの種類の提案ですか?

+0

あなたはまだ多くの多くを持つことができます。 「Benefit :: belongsToMany(Benefit)」、「Benefit :: belongsToMany(Food)」、「Benefit :: belongsToMany(BenefitRating)」、「BenefitRating :: belongsToMany(Benefit)」、そして最後に「Food :: belongsToMany(Benefit) BenefitRating) '、' BenefitRating :: belongsToMany(食べ物) '。そうすれば、 'Food :: with( 'benefits.benefitRatings') - > find($ id)'のようなことができます。 – devk

答えて

0

私はあなたがEloquentで既に定義されたモデル間の関係を使用していると仮定します。

あなたはnested eager loadingを使用することができます。

$food = Food::where('id', $foodId) 
      ->with('foodBenefits.benefitRating', 'foodBenefits.benefit') 
      ->first(); 

またはeager loading

$food = Food::find($foodId); 
$foodBenefit = FoodBenefit::where('food_id', $foodId) 
          ->with('benefit', 'benefitRating') 
          ->get(); 
+0

名誉!強打。 – Rivs