首页 > 解决方案 > 我如何编写此查询。不想用 Eloquent

问题描述

请问谁能告诉我查询?我将 Laravel 5.7 与 mysql 一起使用。

我的表:

用户

食谱

口味

风味食谱(枢轴)

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

- 一个食谱可以有多种口味,一种口味可以在很多食谱中。(多对多)

我如何从给定用户那里获得所有食谱(带有他的口味)?我想使用 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();

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

解决方案


如果我正确理解你的问题,你想要给定用户的所有食谱。

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

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


推荐阅读