2016-04-27 51 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進行分頁,則需要以不同的方式進行分頁。但是,當然,這是一種虛假的方式,因爲您將獲取所有結果並僅打印一些結果。 –