Ich habe eine Testseite, wo ich eine recipes
, ingredients
und ingredient_uses
Tabellen habe. Jedes Rezept "verwendet" Zutaten in verschiedenen Mengen und anders zubereitet (z. B. gehackt, in Scheiben geschnitten, gehackt, gerieben), so dass die ingredient_uses
Tabelle die recipe_id
und die ingredient_id
mit den anderen variablen Informationen verfolgt.Laravel Beziehung rückwärts
Die Beziehungen wie folgt aussehen:
Rezeptmodell:
public function ingredients()
{
return $this->hasManyThrough('App\Ingredient', 'App\IngredientUse');
}
public function ingredientUses()
{
return $this->hasMany('App\IngredientUse');
}
Ingredient_Use Modell:
public function ingredient()
{
return $this->hasOne('App\Ingredient');
}
public function recipe()
{
return $this->belongsTo('App\Recipe');
}
Ingredient Modell:
public function recipe()
{
return $this->belongsToMany('App\Ingredient');
}
Ich dachte, ich wollte eine hasManyThrough
Beziehung vom Rezept zur Zutatentabelle, mit der Zutat_uses als die mittlere Tabelle. Aber die SQL ist falsch:
SELECT `ingredients`.*, `ingredient_uses`.`recipe_id`
FROM `ingredients`
INNER JOIN `ingredient_uses`
ON `ingredient_uses`.`id` = `ingredients`.`ingredient_use_id`
WHERE `ingredient_uses`.`recipe_id` = 1
Dies ist, was ich denke, ich will:
SELECT `ingredients`.*, `ingredient_uses`.`recipe_id`
FROM `ingredients`
INNER JOIN `ingredient_uses`
ON `ingredient_uses`.`ingredient_id` = `ingredients`.`id`
WHERE `ingredient_uses`.`recipe_id` = 1
Gibt es eine entsprechende Beziehung, die ich verwenden sollte?
Warten - ich dachte 'Ingredient_Use' sollte' belongsTo' Zutaten? Warum ist es hasOne? :) –
Ich denke, du solltest in "Ingredient Model", "https://laravel.com/docs/5.3/eloquent-relationships#many-to-many", "goesToMany" verwenden – Borna