【问题标题】:Laravel multiple where clauseLaravel 多个 where 子句
【发布时间】:2018-09-05 15:34:24
【问题描述】:

我试图获取购物车中的食物列表以及收藏夹表。 我使用以下查询来访问它。在条件条款部分,我想检查食物是否在收藏夹表中它也会显示,或者它是否在购物车表中也会显示。但它无法检查 where 子句内部意味着食品 ID 在购物车表中但不在该用户中。所以它应该返回 cart_id 为 null 但它显示 cart_id 尽管该用户没有添加到他的 carts 表中。在收藏夹表中也发生了同样的情况。我怎样才能使它正确?

$foods = DB::table('foods')
             ->leftjoin('carts','carts.food_id','foods.id')
             ->leftjoin('favorites','favorites.food_id','foods.id')
             ->select('foods.food_name', DB::raw('carts.id as cart_id'),DB::raw('favorites.id as favorite_id'),'foods.id','foods.display_image','foods.price','foods.category_id','foods.description','foods.restaurant_id' )
             ->where('foods.restaurant_id','=',$request->Input(['restaurant_id']))    
                ->orwhere(function ($query) {
                            $query->where('carts.user_id','=',Auth::user()->id)
                                  ->where('favorites.user_id','=',Auth::user()->id);
                    })  

               ->get();

【问题讨论】:

  • 我不知道你在问什么,但你真的应该学习雄辩。
  • 能否请您发布您正在使用的数据库表和 Laravel 模型?
  • 所以您想获得具有特定 restaurant_id 且必须在购物车或收藏夹表中的食物?
  • 我想要属于该餐厅的食物列表,如果食物属于购物车或收藏夹,我想要该身份验证用户的 cart_id 和 favorite_id。如果它不存在,它应该将 cart_id 和 favorite_id 返回为 null。

标签: mysql laravel laravel-5 query-builder


【解决方案1】:

试试这个:

$foods = DB::table('foods')
    ->leftJoin('carts', function($join) {
        $join->on('carts.food_id', 'foods.id')
            ->where('carts.user_id', Auth::id());
    })
    ->leftJoin('favorites', function($join) {
        $join->on('favorites.food_id', 'foods.id')
            ->where('favorites.user_id', Auth::id());
    })
    ->select(...)
    ->where('foods.restaurant_id', $request->input('restaurant_id'))
    ->get();

顺便说一句:列别名不需要DB::raw()

->select('carts.id as cart_id')

【讨论】:

    【解决方案2】:

    假设您正在查询属于餐厅的食物并且用户添加到购物车或喜欢它,您在 SQL 中的条件子句是:

    WHERE restaurant_id=:restaurant_id
        AND (carts.user_id=:user_id OR favorites.user_id=:user_id)
    

    你的 laravel 条件子句将是:

    ->where('foods.restaurant_id', $request->input('restaurant_id')
    ->where(function ($query) {
        $query->where('carts.user_id', Auth::user()->id)
              ->orWhere('favorites.user_id', Auth::user()->id);
    })
    

    【讨论】:

    • 我想要属于该餐厅的食物列表,如果食物属于购物车或收藏夹,我想要该身份验证用户的 cart_id 和 favorite_id。
    • 我已经尝试过您提供的解决方案,但它显示了数据库中的 cart_id 和 favorites_id ,但该身份验证用户没有。因此,它不是返回 null 而是显示值
    猜你喜欢
    • 2020-09-28
    • 1970-01-01
    • 1970-01-01
    • 2016-04-10
    • 2019-11-27
    • 2013-10-29
    • 2023-03-08
    • 2016-12-31
    • 2016-01-04
    相关资源
    最近更新 更多