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.
Я надеюсь, что это хороший ответ для вас.:) Удачи.