我如何编写此查询。不想用口才

时间:2018-09-17 21:34:17

标签: laravel-5 left-join laravel-query-builder

请问有人可以告诉我该查询吗?我在MySQL上使用Laravel 5.7。

我的桌子:

用户

  • id
  • 名称

食谱

  • id
  • user_id
  • 名称

风味

  • id
  • 名称

flavor_recipe(枢轴)

  • flavour_id
  • recipe_id

-一个用户可以有很多食谱(一对多)

-食谱可以具有多种风味,多种食谱中也可以具有风味。(多对多)

我如何从给定的用户那里获得所有食谱(包括他的口味)? 我想使用Laravel Querybuilder,而不是雄辩的。

我正在尝试此操作,但是它不起作用:

$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 :(得分:0)

如果我正确理解了您的问题,则需要给定用户的所有食谱。

如果我看看您的查询,您是从数据透视表开始的,我认为这不是正确的方法。另外,您永远不要声明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();

我希望这对您有用。让我知道这是否不是您所需要的。