2016-02-26 17 views
7

Dies ist meinLaravel Eloquent Grenze und Offset

$art = Article::where('id',$article)->firstOrFail(); 
    $products = $art->products; 

Ich nehme möchte nur ein Limit 'Produkt' Dies ist falsch

$products = $art->products->offset($offset*$limit)->take($limit)->get(); 

Bitte geben Sie mir eine Hand!

Danke!

+0

schreiben dies würde Ihnen helfen http://stackoverflow.com/questions/27457249/laravel-e loquen-skip-n-take-all – SarangaR

+0

@ SangTrần Verwenden Sie einfach 'products()' anstelle von 'products'. Und es wird funktionieren. –

+0

Wie Doan Tran erwähnt, sollten Sie diese Methoden auf dem Builder aufrufen, keine Sammlung. Sammlungen haben keine Methode 'skip'. – lagbox

Antwort

-1

Bitte versuchen Sie es wie diese,

return Article::where('id',$article)->with(['products'=>function($products, $offset, $limit) { 
    return $products->offset($offset*$limit)->limit($limit); 
}]) 
+0

Danke, Nisam aber es funktioniert nicht. in meiner Datenbank, ein Artikel hat viele Produkte über 'article_product' Tabelle. Ich kann alle Produkte zeigen (e.g was mit article_id = 1) verbunden ist –

+0

Die anonyme Funktion ist falsch. – lagbox

1

Sie können wie unten skip und take Funktionen nutzen:

$products = $art->products->skip($offset*$limit)->take($limit)->get(); 

// skip sollte param als Integer-Wert übergeben werden die Datensätze und Startindex überspringen

// take erhält einen ganzzahligen Wert, um die Nr. Zu erhalten. von Aufzeichnungen nach Index von skip

EDIT

Es definiert beginnen. Ich wurde mit deiner Frage missverstanden. Wenn Sie etwas wie Paginierung wollen, wird die forPage Methode für Sie arbeiten. Die forPage-Methode funktioniert für Sammlungen.

REf : https://laravel.com/docs/5.1/collections#method-forpage

beispiels

$products = $art->products->forPage($page,$limit); 
+0

Sammlungen haben keine "Skip" -Methode. – lagbox

13
skip = OFFSET 
$products = $art->products->skip(0)->take(10)->get(); //get first 10 rows 
$products = $art->products->skip(10)->take(10)->get(); //get next 10 rows 

Von Laravel doc 5,2 https://laravel.com/docs/5.2/queries#ordering-grouping-limit-and-offset

Überspringen/nehmen

die Anzahl der Ergebnisse, um von der Abfrage oder überspringen eine bestimmte Anzahl von Ergebnissen in der Abfrage (OFFSET), können Sie die überspringen zurück begrenzen verwenden und Methoden nehmen:

$users = DB::table('users')->skip(10)->take(5)->get();

In Laravel 5.3 können Sie (https://laravel.com/docs/5.3/queries#ordering-grouping-limit-and-offset)

$products = $art->products->offset(0)->limit(10)->get();