Laravel 5.6通过活动记录进行选择

时间:2018-07-26 06:50:12

标签: php laravel mysqli pdo laravel-5.6

用户表

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();

2 个答案:

答案 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();