Поисковый запрос Laravel не работает с помощью Elquent - PullRequest
0 голосов
/ 09 января 2019

У меня есть запрос, подобный приведенному ниже, который выбирает записи.

$posts = User::whereHas('roles', function($q)use($search){
                    $q->where('name', '=', 'agent')
                    ->where('first_name', 'like', "%".$search."%")
                    ->orWhere('last_name','like',"%".$search."%")
                    ->orWhere('created_at','like',"%".$search."%");
                })->limit($limit)
                ->orderBy($order,$dir)
            ->get();

Приведенный выше запрос, который я использую для разбивки на страницы, означает получение следующих 10 записей, но он не работает.

Следующие переменные публикуются из ajax

$limit = $request->input('length');
$start = $request->input('start');
$order = $columns[$request->input('order.0.column')];
$dir = $request->input('order.0.dir');

Ajax работает нормально, но я всегда получаю первые 10 записей, когда отправляю следующие 10 записей. Может ли кто-нибудь любезно помочь. Спасибо

Ответы [ 2 ]

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

Для поиска по нескольким столбцам с одним ключом вы можете сделать так:

$employee = Employee::whereHas('roles', function ($query) {
                $query->where('name', '=', 'developer');
            })
            ->where(function ($q) use ($search) {
                if ($search != '') {
                    $query->where('employee_name', 'LIKE', '%' . $search . '%');
                    $query->orWhere('email', 'LIKE', '%' . $search . '%');
                    $query->orWhere('phone', 'LIKE', '%' . $search . '%');
                }
                $query->Where('type', '2');
            })
            ->offset($start)
            ->limit($limit)
            ->orderBy('employee_name')
            ->get();
0 голосов
/ 09 января 2019

У вас есть две проблемы: вы никогда не передаете смещение, поэтому вы всегда получите те же 10 записей. И вы смешиваете свои И / ИЛИ, чтобы имя не ограничивалось агентом. Итак, чтобы исправить это, передайте OR в другой корпус:

$posts = User::whereHas('roles', function($q)use($search){
    $q->where('name', '=', 'agent')
        ->where(function($query) use ($search) {
            $query->where('first_name', 'like', "%".$search."%")
                ->orWhere('last_name','like',"%".$search."%")
                ->orWhere('created_at','like',"%".$search."%");
        });

})
    ->offset($start)
    ->limit($limit)
    ->orderBy($order,$dir)
    ->get();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...