【问题标题】:Laravel pagination render() not workingLaravel 分页渲染()不起作用
【发布时间】:2016-08-22 09:38:07
【问题描述】:

我有一个控制器可以找到产品并返回查看。 目前我正在尝试进行分页,我正在使用以下代码:

return $this->queryProductsAvailable()
                ->where('fornecedores.plano_id', $plano)
                ->select('produtos.*')
                ->paginate( $limit );      

功能查询ProductsAvailabe:

private function queryProductsAvailable()
{   
   return Products::join('fornecedores', 'fornecedores.id', '=' ,'produtos.fornecedor_id')
                        ->where( 'fornecedores.ativo', '1')
                        ->where( 'produtos.moderacao', 'P' )
                        ->where( 'produtos.ativo' , '1' )  
                        ->where( 'produtos.preco_min', '>', 0 )
                        ->select( 'produtos.*');                   
}

要查看我要返回以下内容:

return view('Catalogo.index', 
                    [ 
                        'products' => $products
                    ] 
                );

但是当我运行 $products->render() 方法时,什么也没有发生。
没有错误,没有消息...
如果我运行$products->total(),则返回值 0
如果我运行 $products->nextPageUrl() 没有任何反应

用于访问此方法的相同变量用于产品的循环和打印,并且 foreach 工作正常。

如果我使用/?page=2 访问网址,则分页可以工作,但不能呈现页面列表。

有什么想法吗?

----编辑----

代码工作如下:

在我的站点中有计划(计划 5 级),这将使产品排在另一个之前,然后搜索产品我执行以下操作:

在第一次搜索中,我寻求 30 级产品 5 如果 5 级没有 30 种产品,我检查带了多少产品来查询,我减少 30 并在计划中寻求更多产品 4 完成 30 产品等开。

在这个过程中,当我们减少一个计划时,我使用push方法添加集合,每当计划减少时,分页限制也在改变......

所以我有两点可能会导致这个问题,第一点是推送方法,第二点是减少计划并寻求更多具有不同分页的产品。第一个是 30。

除了我的查询也是随机搜索产品,我相信我需要开发自己的分页来满足我的所有要求......

谢谢大家

【问题讨论】:

  • 您期望得到多少结果? render() 如果您的分页结果数量少于分页数,则不会执行任何操作。
  • 嗨@user3158900。我的分页接收值 30 和变量显示 30 个产品。数据库中存在 500 个产品。

标签: php laravel laravel-5 pagination laravel-5.1


【解决方案1】:

Paginate 返回一个 LengthAwarePaginator 对象,而不是一个集合。这可能会导致问题。

【讨论】:

    【解决方案2】:

    我会做这些事情:

    • 如果呈现 html,请使用 firebug 或 chrome devtools 检查您的视图;
    • 检查您是否在视图中使用{!! $products->render() !!};
    • 使用 dd/var_dump/print_r 检查查询结果。将 ->paginate(...) 替换为 ->get() 并查看您的查询是否返回了正确的值。

    return $this->queryProductsAvailable() ->where('fornecedores.plano_id', $plano) ->select('produtos.*') ->get( $limit )

    尝试这些,然后返回结果。我认为您的查询有问题。

    • 最后,检查 storage/logs/laravel.log 以获取任何信息。

    【讨论】:

    • 您好,感谢您的回答!我认为问题在于验证 var $products 包含 30 个项目的循环。循环解释起来很复杂,但在循环中我使用方法 ->push (用于在集合中添加缺少的 itens ),除此之外,当第一次搜索未获得产品限制时,paginte 的值会在循环期间更改。由于上述问题,我正在考虑创建自己的分页..
    • 在查询前尝试使用 \DB::enableQueryLog(),在查询后尝试使用 \DB::getQueryLog()。您可以检查您的 SQL 是否正确。如果无法使用 SQL 进行分页,则需要以不同的方式进行分页。但当然,这是一种虚拟的方式,因为您将获取所有结果并且只打印一些结果。
    【解决方案3】:

    尝试在您的视图中执行此操作以打印分页:

    {!! $products !!}}
    

    如果您的项目等于或小于您传递给paginate($limit) 函数的限制,则不会显示

    【讨论】:

      【解决方案4】:

      paginate() 方法只会在查询中添加限制和偏移量。为了显示结果,您需要返回视图:

      $products = $this->queryProductsAvailable()
                      ->where('fornecedores.plano_id', $plano)
                      ->select('produtos.*')
                      ->paginate( $limit );
      
      return view('Catalogo.index', 
                          [ 
                              'products' => $products
                          ] 
                      );
      

      【讨论】:

      • 我已经返回了这个变量...但是方法 ->render(), ->total() 是空的。我可以使用该变量循环并在 html 中插入产品,但是在尝试创建分页列表时,没有任何反应。
      • 我不明白,因为在您给出的示例中,您没有分配 $results 变量而是返回查询结果。如果你用get() 改变分页会发生什么。顺便说一句,显示分页链接的是{!! $products->links() !!}。
      • 在 5.1 中是 render(),在 5.2 中是 links()。
      • php artisan --version Laravel 框架版本 5.1.34 (LTS)
      • @BeS 您是否建议我使用 get 而不是 paginate ?但是分页不会去工作? (虽然不再工作)
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2018-04-04
      • 1970-01-01
      • 1970-01-01
      • 2014-08-15
      • 1970-01-01
      • 1970-01-01
      • 2019-08-21
      相关资源
      最近更新 更多