Laravel Eloquent получи много через другой стол

Привет у меня три стола

Рецепты

id | name
1  | Spaghetti

питание

id | name
1  | tomato
2  | banana

Рецепты ингредиентов

id | idRecipe | idFood
1  | 1         | 1
2  | 1         | 2

Как из рецептов я могу получить все названия продуктов через таблицу ингредиентов рецептов?

В модельных рецептах я пытаюсь использовать красноречивые отношения. Имеет много сквозных, но это не работает.

public function NameFood()
  {
      return $this->hasManyThrough('App\Food', 'App\IngredientRecipes', 'idRecipe', 'id', 'idFood');
  }

1 ответ

В вашей модели Рецепта вы можете создать отношение ownToMany.

class Recipe extends Model
{
    public function foods()
    {
        return $this->belongsToMany(
            App\Food::class,
            'ingredient_recipes',
            'idRecipe',
            'idFood',
        );
    }
}

Теперь вы можете взять все продукты из рецепта:

$all_foods = $my_recipe->foods;
$only_names = $my_recipe->foods->pluck('name');

Лучше называйте свои внешние ключи как: "tablename_id" пример: "food_id", "recipe_id". Это автоматическое именование в отношениях Laravel.

Я надеюсь, что это хороший ответ для вас.:) Удачи.

Другие вопросы по тегам