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); 

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