Laravel分页渲染()不起作用

时间:2016-04-27 21:03:26

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

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

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

function queryProductsAvailabe:

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访问具有avprobe分区的网址,但不会显示网页列表。

有什么想法吗?

---- Edite ----

代码的工作原理如下:

在我的网站上有计划(计划5个级别),使产品先于另一个列出,然后搜索产品我执行以下操作:

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

在这个过程中,当我们减少计划时,我使用push methodo来添加集合,每当计划减少时,分页限制也会被更改...

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

除了我的查询还随机搜索产品,我相信我需要开发自己的分页符合我的所有要求......

谢谢大家

4 个答案:

答案 0 :(得分:0)

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

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

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

答案 1 :(得分:0)

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

{!! $products !!}}

它不会显示您是否有等于或小于您传递给paginate($limit)函数的限制的项目

答案 2 :(得分:0)

我会做那些事情:

  • 如果呈现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以获取任何信息。

答案 3 :(得分:0)

Paginate返回LengthAwarePaginator对象,而不是Collection。这可能会导致问题。