我遇到了 Laravel 的 ->paginate() 方法的问题。基本上,我有一个动态查询,根据传递给 Controller ​​的 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()

最佳答案

像这样尝试 '%'.$search.'%'

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

关于php - Laravel Paginate 不能使用::where(...),我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/29288395/

10-13 06:37