用户表
depart_id | | user_role
5个| 1
4,2 | 2
5,2 | 2
1,5 | 1
我想获取所有具有user_role = 1和depart_id = 5和depart_id = 1的用户
如何使用活动记录(或常规查询)来实现?
我的代码是
$user_depart = array(5,1);
$user_role = 1;
$data = DB::table('tbl_users')
->where('user_role', $user_role)
->whereIn('department_id',$user_depart)
->get();
答案 0 :(得分:0)
您创建了错误的数据库结构。最佳方法-创建表users_departs(user_id,depart_id)
然后您可以这样做:
$userDeparts = [5,1];
$userRole = 1;
$users = User::with('users.departs')
->where('users.role_id', $userRole)
->whereIn('departs.id', $userDeparts)
->get();
答案 1 :(得分:0)
我不认为一个简单的whereIn可以在这里工作。给定表的架构,在列(IMO)中分配多个键不是一个好习惯
但您可以尝试一下。我尝试使用LIKE
语句。
$user_depart = array(5,1);
$user_role = 1;
$data = DB::table('tbl_users')
->where('user_role', $user_role)
->where(function($sql) use ($user_depart){
for($i = 0; $i < count($user_depart); $i++){
$sql->orWhere('department_id','LIKE','%' . $user_depart[$i] . '%');
}
})
->get();