我对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()
答案 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
,并显示了我期望的结果。