Laravel Paginate不使用:: where(...)

时间:2015-03-26 20:39:00

标签: php laravel laravel-4 pagination

我对Laravel的->paginate()方法有疑问。基本上,我有一个动态查询,基于传递给控制器​​的GET参数,它有或没有::where()子句。如果没有::where(),我可以调用->paginate(100)并将结果集拆分为100页。当尝试使用::where(...)->paginate(100)执行相同操作时,我得到0结果。

起初我认为我的查询错误,但删除->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()

2 个答案:

答案 0 :(得分:1)

试试这个'%'.$search.'%'

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

答案 1 :(得分:1)

我今天早上发现了解决方案,似乎我需要关闭这个问题。基本上,当我调用搜索方法以及$_GET field=example&search=test时,它还会发送当前页面,例如page=2。现在,如果结果集返回< 100个结果,第2页将不存在,并且查询中不会返回任何结果(因为limit 100 offset 100)。使搜索功能$_GET成为基本网址,而网页没有正确链接到page=1,并显示了我期望的结果。