2016-04-27 12 views
1

私はコントローラーを持っています。 現在の私は改ページを作成しようとしていると私は次のコードを使用しています:Laravelページ番号レンダリング()が動作しません

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

機能queryProductsAvailabe:

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

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.*');     
} 

を表示するには、私は次返しますよ

しかし、私は方法$products->render()を実行すると何も起こりません。私は$products->nextPageUrl()何も

このメソッドにアクセスするために使用したのと同じ変数はループや印刷のために使用されている起こらない実行する場合
エラーなし、メッセージなし...
私は$products->total()を実行する場合は、値0
を返されません製品とforeachはうまく動作します。

私は/?page=2でURLにアクセスするとページネーションが機能しますが、ページのリストは表示されません。

私のサイトでは、他の前にリストされている製品を行います計画(計画5レベル)があります。次のように

---- Edite ----

コードは動作します

最初の検索では30レベルの製品を探します5レベル5に30の製品がない場合は何個の製品がクエリに使用されているかチェックし、30を減らしてシークしますプラン4の製品がより多く、30の製品を完成させるなどです。このプロセスで

、私たちは私がコレクションを追加するためにプッシュmethodoを使用する計画を低減し、計画の減少があるたびに、のpaginate制限も...

を変更されているときに、私は2を持っていますこの問題を引き起こしている可能性がある点は、最初はプッシュ方式であり、2番目はプランを縮小し、最初の1つが異なるページング数の製品をさらに探すことです。

それ以外の検索クエリ無作為に、私は自分のすべての要件を満たすために自分のページングを開発する必要があると信じています...

ありがとうございました

+0

いくつの結果が期待されますか?ページされている結果の数が少ない場合、 'render()'は何もしません。 – user3158900

+0

hi @ user3158900 私のページングは​​値30を受け取り、変数は30のプロダクトを受け取ります。データベースに が存在します500製品。 – Dayglor

答えて

0

paginate()メソッドは、クエリの制限とオフセットのみを追加します。結果を表示するためには、あなたの代わりにビューを返す必要があります:

$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がレンダリングされている場合は、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の情報を確認してください。
+0

こんにちは、あなたの答えをありがとう! 問題は、var $ productsに30個の項目が含まれていることを確認するループにあると思います。 ループは説明するのは複雑ですが、ループでは、メソッド - >プッシュを使用してコレクションの欠落を補うために、最初の検索で商品制限が得られないときにループ中にpaginteの値が変更されます。 私は上記の質問のために私自身のページングを作成しようと考えています。 – Dayglor

+0

クエリの前に\ DB :: enableQueryLog()を使い、クエリの後に\ DB :: getQueryLog()を使ってみてください。 SQLが正しいかどうかを確認することができます。 SQLを使用して改ページできない場合は、別の方法で改ページする必要があります。もちろん、すべての結果を取り出していくつか印刷するだけなので、それはダミーの方法です。 –

関連する問題