laravel 多条件查询用法

来源:互联网 发布:电脑软件搬家 编辑:程序博客网 时间:2024/05/29 04:58

方法一、直接用where和匿名函数用法:

[php] view plain copy
  1. $list = DB::table($this->table)  
  2. ->join('user''user.id''='$this->table . '.user_id')  
  3. ->where(function($queryuse($data) {  
  4.     if (!empty($data['order_sn'])) {  
  5.         $query->where($this->table . '.order_sn''like''%' . $data['order_sn'] . '%');  
  6.     }  
  7. })  
  8. ->where(function($queryuse($data) {  
  9.     if (isset($data['order_status']) && is_numeric($data['order_status'])) {  
  10.         $query->where($this->table . '.order_status''='$data['order_status']);  
  11.     }  
  12. })  
  13. ->where(function($queryuse($data) {  
  14.     if (isset($data['ship_status']) && is_numeric($data['ship_status'])) {  
  15.         $query->where($this->table . '.ship_status''='$data['ship_status']);  
  16.     }  
  17. })  
  18. ->where(function($queryuse($data) {  
  19.     if (isset($data['pay_status']) && is_numeric($data['pay_status'])) {  
  20.         $query->where($this->table . '.pay_status''='$data['pay_status']);  
  21.     }  
  22. })  
  23. ->where(function($queryuse($data) {  
  24.     if (!empty($data['start_time']) && !empty($data['end_time'])) {  
  25.         $query->where($this->table . '.update_time''>='$data['start_time'])  
  26.     ->where($this->table . '.update_time''<='$data['end_time']);  
  27.     } else if (!empty($data['start_time'])) {  
  28.         $query->where($this->table . '.update_time''>='$data['start_time']);  
  29.     } else if (!empty($data['end_time'])) {  
  30.         $query->where($this->table . '.update_time''<='$data['end_time']);  
  31.     }  
  32. })  
  33. ->where($this->table . '.drugstore_id''=', 0)  
  34. ->where($this->table . '.user_id''!=', 0)  
  35. ->select($this->table . '.id as id',   
  36.     $this->table . '.order_sn as order_sn',   
  37.     $this->table . '.order_status as order_status',   
  38.     $this->table . '.ship_status as ship_status',   
  39.     $this->table . '.pay_status as pay_status',   
  40.     $this->table . '.total_paid as total_paid',   
  41.     $this->table . '.update_time as update_time',   
  42.     'user.nickname as name',   
  43.     'user.mobile as phone',   
  44.     $this->table . '.is_remittance as is_remittance')  
  45. ->orderBy($sortby$sortvalue)  
  46. ->take($data['pageSize'])  
  47. ->skip($data['pageNo'] > 1 ? ($data['pageNo'] - 1) * $data['pageSize'] : 0)  
  48. ->get();  


方法二:用when方法及匿名函数

https://d.laravel-china.org/docs/5.4/queries#conditional-clauses


有时候,你希望某个值为 true 时才执行查询。例如,如果在传入请求中存在指定的输入值的时候才执行这个 where语句。你可以使用 when 方法实现:

$role = $request->input('role');$users = DB::table('users')                ->when($role, function ($query) use ($role) {                    return $query->where('role_id', $role);                })                ->get();

只有当 when 方法的第一个参数为 true 时,闭包里的 where 语句才会执行。如果第一个参数是 false,这个闭包将不会被执行。

你可能会把另一个闭包当作第三个参数传递给 when 方法。如果第一个参数的值为 false 时,这个闭包将执行。为了说明如何使用此功能,我们将使用它配置默认排序的查询:

$sortBy = null;$users = DB::table('users')                ->when($sortBy, function ($query) use ($sortBy) {                    return $query->orderBy($sortBy);                }, function ($query) {                    return $query->orderBy('name');                })                ->get();