2016-04-27 76 views
1

我有一个控制器阙查找产品并返回查看。 当前我试图让分页和我使用下面的代码:Laravel分页渲染()不起作用

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

功能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->nextPageUrl()没有任何反应

用于访问该方法的同一个变量是用于循环和打印
没有错误,没有任何消息......
如果我跑$products->total()返回值为0
产品和foreach工作正常。

如果我访问url为/?page=2的分页工作,但没有渲染页面列表。

有什么想法?

---- ---- Edite

代码的工作原理如下:

在我的网站有计划(计划5级),这将使产品前,另一列,然后搜索产品我做了以下几点:

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

在这个过程中,当我们减少一个计划我用推methodo添加的收集和每当有计划的减少,PAGINATE极限也正在改变...

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

除此之外,我的查询还搜索产品随机地,我相信我需要开发自己的分页符以满足我所有的要求...

谢谢大家

+0

您期待得到多少结果?如果你的分页结果数少于你的分页数,render()将不会执行任何操作。 – user3158900

+0

hi @ user3158900。 我的分页接收值30和变量显示30个产品。在数据库中存在 存在500个产品。 – Dayglor

回答

0

paginate()方法ill只在您的查询中添加限制和偏移量。为了显示结果,您将需要返回的观点相反:

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

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

我已经返回这个变量... 但方法 - > render(), - > total()是空的。 我可以使用该变量循环并在html中插入产品,但是当尝试创建分页列表时,什么都不会发生。 – Dayglor

+0

我没有理解,因为在你给出的例子中,你不要指定'$ results'变量,而是返回查询的结果。如果用'get()'改变分页,会发生什么。顺便说一下,它是'{! $ products-> links()!!}'显示分页链接。 – BeS

+0

它是5.1中的'render()',5.2中的'links()'。 – user3158900

0

尝试在你看来这样做是为了打印分页:

{!! $products !!}} 

,如果你有一个项目它不会显示等于或小于你传递给paginate($limit)函数极限

0

我会做这些事情:

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

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

尝试那些和你的结果回来。我认为你正在做你的查询错误。

  • 最后,检查存储/日志/ laravel.log的任何信息。
+0

嗨,谢谢你的回答! 我认为问题出现在验证var $ products包含30个项目的循环中。 这个循环很复杂,但是在循环中我使用方法 - > push(用于添加缺少的itens),并且在循环期间更改paginte的值时,第一次搜索没有获得产品限制。 因为上述问题,我在创建自己的分页。 – Dayglor

+0

尝试在查询之前使用\ DB :: enableQueryLog(),并在查询之后使用\ DB :: getQueryLog()。你可以检查你的SQL是否正确。如果您无法使用SQL进行分页,则需要以不同的方式进行分页。但是,当然,这是一种虚假的方式,因为您将获取所有结果并仅打印一些结果。 –