【问题标题】:Laravel Where and OrWhere multiple conditionsLaravel Where 和 OrWhere 多个条件
【发布时间】:2016-09-01 00:59:14
【问题描述】:

我有以下疑问:

$items = UserItems::join('items','items.id','=','user_items.item_id')
            ->where('user_id','=',$this->id)
            ->where('quantity','>',0)
            ->where('items.type',"stones")
            ->orWhere('items.type',"fish")
            ->get();

我的问题是这个查询返回所有用户的项目而不是给定的user_Id.。这是因为 orWhere 适用于所有 where's 但我需要它仅适用于这个:

->where('items.type',"stones")
                ->orWhere('items.type',"fish")

如何修复查询以仅返回给定的 $this->id 用户项目?

【问题讨论】:

  • 我猜另一个选项,而不是orWhere,可能是使用whereIn 运算符,例如:->whereIn('items.type', ["stones", "fish"])

标签: laravel


【解决方案1】:

Laravel 支持 Advanced Where Clauses 这样的:

$items = UserItems::join('items','items.id','=','user_items.item_id')
    ->where('user_id','=',$this->id)
    ->where('quantity','>',0)
    ->where(function($query) {
        $query->where('items.type',"stones")
            ->orWhere('items.type',"fish");
    })
    ->get();

我猜另一种选择(更简洁,更易于阅读 IMO),而不是使用 orWhere,可能是使用 whereIn operator,例如:

$items = UserItems::join('items','items.id','=','user_items.item_id')
    ->where('user_id','=',$this->id)
    ->where('quantity','>',0)
    ->whereIn('items.type', ["stones", "fish"])
    ->get();

【讨论】:

    【解决方案2】:

    使用闭包,如下所示:

    $userId = $this->id;
    $items = UserItems::join('items','items.id','=','user_items.item_id')
    ->where('user_id','=', $userId)
    ->where('quantity','>',0)
    ->where(function($query) {
        $query
        ->where('items.type',"stones")
        ->orWhere('items.type',"fish");
    })
    ->get();
    

    【讨论】:

      猜你喜欢
      • 2021-07-12
      • 1970-01-01
      • 2015-01-19
      • 1970-01-01
      • 2016-04-23
      • 1970-01-01
      • 1970-01-01
      • 2021-02-11
      • 2020-01-01
      相关资源
      最近更新 更多