Laravel雄辩的使用循环

时间:2019-02-05 05:20:22

标签: laravel eloquent

我正在使用雄辩的查询来过滤数据。我的查询就是这样,它现在可以正常工作了。

$users = User::where('username','LIKE','%'.request('username').'%')
            ->where('first_name','LIKE','%'.request('first_name').'%')
            ->where('last_name','LIKE','%'.request('last_name').'%')
            ->where('gender','LIKE','%'.request('gender').'%')
            ->where('password','LIKE','%'.request('password').'%')
            ->SimplePaginate(15);

我的请求数据是这样的。

enter image description here

但是,我需要针对动态字段更新此查询。可以有不同的字段。我所做的是在关联数组中发送请求。因此,我的请求数据变成了这样

enter image description here

我打算做的是将所有请求数据放入搜索数组中。然后使用循环像上面的查询一样运行。我该怎么办?

P.S。我在论坛上签到,发现了一些类似的问题。其中一些已经过时了。其他人没有解决我的问题。

3 个答案:

答案 0 :(得分:2)

如果我了解您的权利,您可以这样做:

GET unsafe:data:application/octet-stream;base64,Zm9vMQ== net::ERR_UNKNOWN_URL_SCHEME

答案 1 :(得分:0)

where()子句也可以接受数组。考虑到这一点,您可以映射搜索参数并将其转换为所需的格式,然后将其输入查询中。

例如:

$search = [
    'first_name' => 'John',
    'last_name'  => 'Smith'
];

$filters = collect($search)->map(function($value, $key) {
    return  [$key, 'LIKE', "%{$value}%"];
})->values()->toArray();

return User::where($filters)->SimplePaginate(15);

答案 2 :(得分:0)

您可以尝试一下。

$search = $request->get('search');

User::where(function ($q) use ($search){    
          foreach ($search as $key=>$value) {
            if($value != null ){   
                $q->where($key, 'like', "%{$value}%");  
            }
          }
 })->get();