Laravel 分页不适用于 ::where(...)
Laravel Paginate Not Working with ::where(...)
我对 Laravel 的 ->paginate()
方法有疑问。基本上,我有一个动态查询,该查询基于传递给控制器的 GET
参数,其中包含或不包含 ::where()
子句。如果没有 ::where()
,我可以调用 ->paginate(100)
并将结果集分成 100 页。当尝试用 ::where(...)->paginate(100)
做同样的事情时,我得到 0 个结果。
起初我以为我的查询是错误的,但是删除了 ->paginate(100)
并将其替换为 ->get()
returns 预期的结果数。这是完整的代码:
$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)
returns 整个 object(Illuminate\Pagination\Paginator)
集合,其中有我的结果,但不是以可访问的方式。如果您想查看我正在谈论的结果,运行 dd()
在没有 ->get(), ->first() or ->paginate()
的查询中
这样试试'%'.$search.'%'
$templates = Template::where($field, "LIKE", '%'.$search.'%')
->orderBy($sort, $order)
->paginate(100);
我今天早上找到了解决方案,看来我需要解决这个问题。基本上,当我调用搜索方法时,连同 $_GET
ing field=example&search=test
,它也会发送当前页面,例如 page=2
。现在,如果结果集返回 < 100 个结果,则第 2 页将不存在,并且查询中不会返回任何结果(因为 limit 100 offset 100
)。使搜索功能 $_GET
成为基础 URL 而页面没有正确链接到 page=1
并显示了我期望的结果。
我对 Laravel 的 ->paginate()
方法有疑问。基本上,我有一个动态查询,该查询基于传递给控制器的 GET
参数,其中包含或不包含 ::where()
子句。如果没有 ::where()
,我可以调用 ->paginate(100)
并将结果集分成 100 页。当尝试用 ::where(...)->paginate(100)
做同样的事情时,我得到 0 个结果。
起初我以为我的查询是错误的,但是删除了 ->paginate(100)
并将其替换为 ->get()
returns 预期的结果数。这是完整的代码:
$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)
returns 整个 object(Illuminate\Pagination\Paginator)
集合,其中有我的结果,但不是以可访问的方式。如果您想查看我正在谈论的结果,运行 dd()
在没有 ->get(), ->first() or ->paginate()
这样试试'%'.$search.'%'
$templates = Template::where($field, "LIKE", '%'.$search.'%')
->orderBy($sort, $order)
->paginate(100);
我今天早上找到了解决方案,看来我需要解决这个问题。基本上,当我调用搜索方法时,连同 $_GET
ing field=example&search=test
,它也会发送当前页面,例如 page=2
。现在,如果结果集返回 < 100 个结果,则第 2 页将不存在,并且查询中不会返回任何结果(因为 limit 100 offset 100
)。使搜索功能 $_GET
成为基础 URL 而页面没有正确链接到 page=1
并显示了我期望的结果。