2015-03-26 2 views
3

У меня проблема с методом Laravel ->paginate(). В принципе, у меня есть динамический запрос, который на основе параметров GET, переданных контроллеру, имеет или не имеет в нем ::where(). Без ::where() я могу позвонить ->paginate(100) и разбить результирующий набор на страницы 100. При попытке сделать то же самое с ::where(...)->paginate(100) я получаю 0 результатов.Laravel Paginate Не работает с :: where (...)

Сначала я думал, что мой запрос был неправильным, но удаление ->paginate(100) и замена его ->get() возвращает ожидаемое количество результатов. Вот полный код:

$search = ((Input::get("search") != "") ? Input::get("search"):""); 
$field = ((Input::get("field") != "") ? Input::get("field"):""); 
if($search != "" && $field != ""){ 
    $templates = Template::where($field, "LIKE", $search) 
    ->orderBy($sort, $order) 
    ->paginate(100); // Fails (0 Results) 
    ->get(); // Works (3 Results) 
} else { 
    $templates = Template::orderBy($sort, $order) 
    ->paginate(100); 
} 

Я не знаю, почему ->paginate() возвращается 0 результатов. Кроме того, dd($templates) возвращает всю коллекцию object(Illuminate\Pagination\Paginator), которая имеет мои результаты, но не доступна. Если вы хотите, чтобы увидеть результат я говорю, бегите dd() по запросу без ->get(), ->first() or ->paginate()

+0

Попытайтесь получить каждый объект в 'foreach'. Ты это пробовал ?? –

+0

@ArkarAung Да, это не проблема. Он не возвращает никаких результатов, которые I * может * пропустить. –

ответ

1

я узнал решение этим утром, кажется, мне нужно спать вопрос выкл. В основном, когда я назвал метод поиска, а также $_GET, входящий в field=example&search=test, он также отправил бы текущую страницу, например page=2. Теперь, если результирующий набор возвратил < 100 результатов, страница 2 не существовала, и результаты запроса не были возвращены (из-за limit 100 offset 100) в запросе. Создание поисковой функции $_GET базового URL-адреса без соответствующей ссылки на страницу page=1 и показало результаты, которые я ожидал.

1

Попробуйте как этот '%'.$search.'%'

$templates = Template::where($field, "LIKE", '%'.$search.'%') 
    ->orderBy($sort, $order) 
    ->paginate(100); 
+0

Я понимаю, что пропустил '%' для поиска, но это не проблема. Даже если запрос верен, он не разбивает страницы на результаты. –