2016-02-26 23 views
7

Questo è miolimite laravel Eloquente e offset

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

Voglio solo prendere un limite di 'prodotto' Questo è il modo sbagliato

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

favore mi dia una mano!

Grazie!

+0

questo aiuterebbe si http://stackoverflow.com/questions/27457249/laravel-e loquent-skip-n-take-all – SarangaR

+0

@ SangTrần Basta usare 'products()' invece di 'products'. E funzionerà. –

+0

Come ha detto Doan Tran, dovresti chiamare quei metodi sul builder, non una raccolta. Le raccolte non hanno un metodo 'skip'. – lagbox

risposta

-1

Si prega di provare in questo modo,

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

Grazie, Nisam ma non funziona. nel mio DB, un articolo ha molti prodotti attraverso la tabella 'article_product'. Posso mostrare tutti i prodotti (e.g che è correlato con article_id = 1) –

+0

La funzione anonima non è corretta. – lagbox

1

È possibile utilizzare skip e take funzioni come qui sotto:

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

// skip devono essere passati param come valore intero di saltare i record e l'indice di partenza

// take ottiene un valore intero per ottenere il n. di record dopo l'inizio indice definito dal skip

EDIT

spiacenti. Sono stato frainteso con la tua domanda. Se vuoi qualcosa come l'impaginazione il metodo forPage funzionerà per te. Il metodo forPage funziona per le raccolte.

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

es

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

Le raccolte non hanno un metodo 'skip'. – 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 

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

salto/rimessa

Per limitare il numero di risultati restituiti dalla query, o di saltare un determinato numero di risultati nella query (offset), è possibile utilizzare il saltare e prendere metodi:

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

In laravel 5.3 è possibile scrivere (https://laravel.com/docs/5.3/queries#ordering-grouping-limit-and-offset)

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