Laravel красноречивый, используя цикл - PullRequest
0 голосов
/ 05 февраля 2019

Я использую красноречивый запрос для фильтрации данных.Мой запрос такой, и пока он работает отлично.

$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

Я собираюсь поместить все данные запроса в массив поиска.Затем используйте цикл для запуска, как в приведенном выше запросе.Как я могу это сделать?

PS Я проверил на форуме и нашел несколько похожих вопросов.Некоторые из них устарели.Другие не решили мою проблему.

Ответы [ 3 ]

0 голосов
/ 05 февраля 2019

Предложение 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);
0 голосов
/ 05 февраля 2019

Вы можете попробовать это.

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

User::where(function ($q) use ($search){    
          foreach ($search as $key=>$value) {
            if($value != null ){   
                $q->where($key, 'like', "%{$value}%");  
            }
          }
 })->get();
0 голосов
/ 05 февраля 2019

Если я вас правильно понимаю, вы можете сделать так:

$search = request('search', []);
$users = User::query();

foreach($search as $field=>$value)
{
    $users = $users->where($field,'LIKE','%'.$value.'%');        
}

$users = $users->SimplePaginate(15);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...