Как я пишу этот запрос.Хотите не использовать Eloquent - PullRequest
0 голосов
/ 18 сентября 2018

Пожалуйста, кто-нибудь может сказать мне запрос? Я использую Laravel 5.7 с mysql.

Мои таблицы:

Пользователи

  • ID
  • имя

рецепты

  • ID
  • user_id
  • имя

Ароматизаторы

  • ID
  • имя

flavour_recipe (pivot)

  • flavour_id
  • recipe_id

-А Пользователь может иметь много рецептов (один ко многим)

-Рецепт может иметь много вкусов, а вкус может быть во многих рецептах. (Многие ко многим)

Как я могу получить все рецепты (с его вкусами) от данного пользователя? Я хочу использовать Laravel Querybuilder, а не Eloquent.

Я пытался это, но это не работает:

$allRecipesFromUserX = DB::table('flavour_recipe')
        ->join('flavours', 'flavours.id', '=', 'flavour_recipe.flavour_id')
        ->join('recipes', 'recipes.id', '=', 'flavour_recipe.recipe_id')
        ->join('users', 'users.id', '=', 'recipes.id')
        ->get();

1 Ответ

0 голосов
/ 18 сентября 2018

Если я правильно понимаю ваш вопрос, вам нужны все рецепты для данного пользователя.

Если я посмотрю на ваш запрос, вы начинаете с сводной таблицы, я не думаю, что это правильный подход. Также вы никогда не объявляете предложение WHERE, чтобы ограничить его конкретным пользователем.

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

$allRecipesForUser = DB::table('users')->where('id', $id)->get();

У пользователя может быть много рецептов

$allRecipesForUser = DB::table('users')
    ->join('recipes', 'users.id', '=', 'recipes.user_id')
    ->where('id', $id)
    ->get();

И рецепт может иметь много вкусов, а вкус может быть во многих рецептах

$allRecipesForUser = DB::table('users')
    ->join('recipes', 'users.id', '=', 'recipes.user_id')
    ->join('flavour_recipe', 'recipes.id', '=', 'flavour_recipe.recipe_id')
    ->join('flavours', 'flavours.id', '=', 'flavour_recipe.flavour_id')
    ->where('users.id', $id)
    ->get();

Надеюсь, это сработает для вас. Дайте мне знать, если это не то, что вам нужно.

...