2016-02-26 13 views
7

To jest mojelaravel Eloquent Limit i przesunięcie

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

chcę tylko wziąć limitem 'produkt' to niewłaściwy sposób

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

Podaj mi rękę!

Dzięki!

+0

to by pomóc http://stackoverflow.com/questions/27457249/laravel-e loquent-skip-n-take-all – SarangaR

+0

@ SangTrần Po prostu użyj 'products()' zamiast 'products'. I to zadziała. –

+0

Jak wspomniał Doan Tran, powinieneś wywoływać te metody na budowniczym, a nie na kolekcji. Kolekcje nie mają metody 'skip'. – lagbox

Odpowiedz

-1

Spróbuj tak,

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

Dzięki, Nisam, ale to nie działa. w moim DB, artykuł ma wiele produktów za pośrednictwem tabeli "article_product". Mogę pokazać wszystkie produkty (np.g co jest związane z article_id = 1) –

+0

Anonimowa funkcja jest niepoprawna. – lagbox

1

Można użyć skip i take funkcje, jak poniżej:

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

// skip powinny być przekazywane param jako wartość całkowitą pominąć zapisy i indeks początkowy

// take pobiera wartość całkowitą, aby uzyskać wartość nie. zapisów po rozpoczęciu indeks zdefiniowany przez skip

EDIT

przykro. Źle zrozumiałem twoje pytanie. Jeśli chcesz coś takiego jak paginacja, metoda forPage zadziała. Metoda forPage działa dla kolekcji.

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

np

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

Kolekcje nie mają metody "pominąć". – 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 

Z laravel dokumencie 5,2 https://laravel.com/docs/5.2/queries#ordering-grouping-limit-and-offset

pominięcia/ma

Aby ograniczyć liczbę wyników zwróconych z zapytania, lub pominąć daną liczbę wyników w zapytaniu (offset), można użyć pominąć i podjąć metod:

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

W laravel 5,3 można napisać (https://laravel.com/docs/5.3/queries#ordering-grouping-limit-and-offset)

$products = $art->products->offset(0)->limit(10)->get(); 
Powiązane problemy