在 where 子句中检查或条件

check or condition in where clause

我想检查 OR 变量 role_idrole_mapping 中的条件table。我想检查 user_id 是否有 role_id '2' 或 '3'。 user_id=210 的用户有 role_id 2 和 1。但我的查询结果打印“3”。如何在Laravel查询中使用or条件?

Role table
  user_id role_id 
   210     2
   210     1

    $user_role=role_mapping::where('user_id','=',210)
    ->where('role_id','=','2')
    ->orwhere('role_id','=','3')
    ->select('role_mapping.role_id')->first();

     echo $user_role->role_id;  // print 3

AND 运算符的优先级高于 OR 运算符,因此您 运行 的查询是:

WHERE (user_id = 210 AND role_id = 2) OR role_id = 3

而你应该 运行

WHERE user_id = 210 AND (role_id = 2 OR role_id = 3)

以下方法可以解决问题:

role_mapping::where('user_id','=',210)
  ->where(function($query) {
    $query->where('role_id','=','2')->orWhere('role_id','=','3');
  })
  ->select('role_mapping.role_id')->first();