2016-04-27 3 views
1

Ich habe einen Controller que die Produkte finden und zurück zur Ansicht. Aktuelle ich die Paginierung machen bin versucht, und ich bin mit dem folgenden Code:Laravel Paginierung render() funktioniert nicht

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

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

Seite zu Ich bin Rückkehr der folgende:

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

Aber wenn ich die Methode $products->render() ausführen passiert nichts.
Keine Fehler, keine Nachrichten ...
wenn ich $products->total() ausgeführt wird, den Wert 0
zurückgegeben, wenn ich $products->nextPageUrl() nichts laufen

die gleiche Variable geschieht verwendet, um dieses Verfahren für den Zugriff ist für die Schleife und Druck verwendet, der Produkte und die foreach funktioniert gut.

wenn ich auf die URL mit /?page=2 zugreifen funktioniert die Seitenumbruch, aber nicht Liste der Seiten rendern.

Irgendeine Idee?

---- ---- Edite

Der Code funktioniert wie folgt:

In meiner Seite gibt es Pläne (Pläne 5 Stufen), die die Produkte vor dem anderen aufgeführten machen sind , dann die Suche nach dem Produkt mache ich folgendes:

In der ersten Suche suche ich 30 Level-Produkte 5, wenn das Level 5 nicht 30 Produkte habe ich überprüfen, wie viele Produkte zur Abfrage gebracht, reduzieren ich die 30 und suchen mehr Produkt im Plan 4, um die 30 Produkte und so weiter zu vervollständigen.

In diesem Prozess, wenn wir einen Plan, den ich den Push-methodo verwenden verringern die Sammlung hinzuzufügen und, wann immer es die Abnahme des Plan ist, wird das Paginieren Limit auch geändert werden ...

Also ich habe zwei Punkte, die dieses Problem verursachen können, die erste ist die Push-Methode und die zweite in der Tat die Reduzierung des Plans und suchen Sie mehr Produkte mit einem anderen paginate der erste war 30.

Andere als das meine Abfrage auch Produkte suchen Zufällig glaube ich, dass ich mein eigenes paginate entwickeln muss, um alle meine Anforderungen zu erfüllen ...

Vielen Dank alle

+0

Wie viele Ergebnisse erwarten Sie? 'render()' wird nichts tun, wenn Sie weniger als die Anzahl der Ergebnisse haben, die Sie paginieren. – user3158900

+0

hi @ user3158900. Mein Paginat erhält den Wert 30 und die Variable 30 Produkte. in der Datenbank existiert 500 Produkte. – Dayglor

Antwort

0

Die paginate() Methode wird nur Limit und Offset in Ihrer Abfrage hinzufügen.Um die Ergebnisse anzuzeigen, müssen Sie die Ansicht zurückzukehren statt:

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

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

Ich gebe diese Variable bereits zurück ... Aber die Methode -> render(), -> total() ist leer. Ich kann die Variable verwenden, um die Produkte in HTML zu loopen und einzufügen, aber beim Versuch, die Paginierungsliste zu erstellen, passiert nichts. – Dayglor

+0

Ich habe das nicht verstanden, da Sie in dem Beispiel, das Sie angegeben haben, die Variable '$ results' nicht zuweisen und stattdessen das Ergebnis der Abfrage zurückgeben. Was passiert, wenn Sie paginate mit 'get()' ändern? BTW, es ist '{!! $ products-> links() !!}, die die Paginierungslinks anzeigt. – BeS

+0

Es ist 'render()' in 5.1, 'links()' in 5.2. – user3158900

0

Versuchen Sie dies Ihrer Ansicht nach tun die Paginierung zu drucken:

{!! $products !!}} 

Es wird nicht angezeigt, wenn Sie Produkte haben gleich oder kleiner als der Grenzwert Sie

0

an die paginate($limit) Funktion übergeben habe ich diese Dinge tun:

  • Überprüfen Sie Ihre Ansicht mit Firebug oder Chrome Devtools, wenn das HTML wiedergegeben wird; Überprüfen Sie, ob Sie {!! $products->render() !!} aus Ihrer Sicht verwenden.
  • Überprüfen Sie mit dd/var_dump/print_r die Ergebnisse Ihrer Abfrage. Ersetzen Sie ->paginate(...) durch ->get() und sehen Sie, ob Ihre Anfrage uns die richtigen Werte zurückgibt.

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

diejenigen Versuchen und kommen zurück mit den Ergebnissen. Ich denke, Sie tun etwas falsch mit Ihrer Anfrage.

  • Schließlich, überprüfen Sie Speicher/logs/Laravel.log für weitere Informationen.
+0

Hallo, danke für deine Antwort! Ich denke, das Problem besteht in einer Schleife, die die var $ -Produkte überprüfen 30 Elemente enthalten. Die Schleife ist komplex zu erklären, aber in der Schleife verwende ich die Methode -> push (für die Sammlung in der fehlenden Itens) und darüber hinaus der Wert für pangente wird während der Schleife geändert, wenn die erste Suche nicht die Produkte zu erhalten. Ich denke in erstellen Sie meine eigenen Paging wegen der Fragen oben .. – Dayglor

+0

versuchen, \ DB :: enableQueryLog() vor der Abfrage und \ DB :: getQueryLog() nach Ihrer Abfrage zu verwenden. Sie können überprüfen, ob Ihr SQL richtig ist. Wenn Sie mit SQL nicht paginieren können, müssen Sie auf andere Weise paginieren. Aber natürlich ist es ein Dummy-Weg, denn Sie werden alle Ergebnisse abrufen und nur ein paar drucken. –