【问题标题】:Laravel Paginate Not Working with ::where(...)Laravel Paginate 不使用 ::where(...)
【发布时间】:2015-05-31 01:20:22
【问题描述】:

我遇到了 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) 集合,其中包含我的结果,但不是以可访问的方式。如果您想查看我所说的结果,请在没有 ->get(), ->first() or ->paginate() 的查询上运行 dd()

【问题讨论】:

  • 尝试获取foreach中的每个对象。你试过吗??
  • @ArkarAung 是的,这不是问题。它不会返回任何我可以循环的结果。

标签: php laravel laravel-4 pagination


【解决方案1】:

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

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

【讨论】:

  • 我意识到我错过了 % 进行搜索,但这不是这里的问题。即使查询正确,也不会对结果进行分页。
【解决方案2】:

我今天早上找到了解决方案,看来我需要解决这个问题。基本上,当我调用搜索方法时,连同$_GETfield=example&search=test,它也会发送当前页面,例如page=2。现在,如果结果集返回 limit 100 offset 100)。将搜索功能 $_GET 设为基本 URL,但页面未正确链接到 page=1,并显示了我期望的结果。

【讨论】:

  • 嗨蒂姆,我遇到了同样的问题,但我不理解这个答案。如果您仍然可以访问它,您能否发布让您工作的确切代码。谢谢。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2014-09-07
  • 1970-01-01
  • 1970-01-01
  • 2020-03-18
  • 2016-05-06
  • 2018-03-29
  • 2018-12-28
相关资源
最近更新 更多