【问题标题】:Laravel 5.6 selection by active recordsLaravel 5.6 通过活动记录选择
【发布时间】:2019-01-03 02:00:06
【问题描述】:

用户表

depart_id         |用户角色

5                       | 1

4,2                    | 2

5,2                    | 2

1,5                    | 1

我想获取所有 user_role=1 和 leave_id=5 和 leave_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();

【问题讨论】:

  • 你的意思是离开_id=5 还是离开_id=1?
  • 为什么depart_id 列中有,?这是一个浮点数还是多个值?
  • @kabanus 我想要 5 和 1
  • @OfficialONE 你的意思是两个对象都有 5 和 1,或者换句话说,所有对象都有 1 或 5?

标签: php laravel mysqli pdo laravel-5.6


【解决方案1】:

您创建了一个错误的数据库结构。最好的办法——创建表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();

【讨论】:

    【解决方案2】:

    我不认为一个简单的 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();
    

    【讨论】:

      猜你喜欢
      • 2011-06-19
      • 1970-01-01
      • 2017-10-22
      • 2011-09-16
      • 1970-01-01
      • 1970-01-01
      • 2017-03-31
      • 1970-01-01
      • 2019-07-11
      相关资源
      最近更新 更多