laravel - limit result eloquent
Laravel Elocuente límite y offset. (6)
Esto es mío
$art = Article::where(''id'',$article)->firstOrFail();
$products = $art->products;
Sólo quiero tomar un límite ''producto'' Esto es incorrecto
$products = $art->products->offset($offset*$limit)->take($limit)->get();
¡Por favor, échame una mano!
¡Gracias!
Rápido:
Laravel tiene un método de paginación rápida, paginación, que solo necesita pasar la cantidad de datos mostrados por página.
//use the paginate
Book::orderBy(''updated_at'', ''desc'')->paginate(8);
cómo personalizar la paginación:
puede utilizar estos métodos: offset
, limit
, skip
, take
offset, límite: ¿dónde comienza la configuración de desplazamiento, limitando la cantidad de datos a consultar?
skip , take: skip omite algunos datos y toma muchos datos
por ejemplo:
Model::offset(0)->limit(10)->get();
Model::skip(3)->take(3)->get();
//i use it in my project, work fine ~
class BookController extends Controller
{
public function getList(Request $request) {
$page = $request->has(''page'') ? $request->get(''page'') : 1;
$limit = $request->has(''limit'') ? $request->get(''limit'') : 10;
$books = Book::where(''status'', 0)->limit($limit)->offset(($page - 1) * $limit)->get()->toArray();
return $this->getResponse($books, count($books));
}
}
Laravel tiene función propia, skip
para offset
y take
para limit
. Al igual que a continuación el ejemplo de la consulta de laravel: -
Article::where([[''user_id'',''='',auth()->user()->id]])
->where([[''title'',''LIKE'',"%".$text_val."%"]])
->orderBy(''id'',''DESC'')
->skip(0)
->take(2)
->get();
Por favor, intente de esta manera,
return Article::where(''id'',$article)->with([''products''=>function($products, $offset, $limit) {
return $products->offset($offset*$limit)->limit($limit);
}])
Pruebe este código de ejemplo:
$art = Article::where(''id'',$article)->firstOrFail();
$products = $art->products->take($limit);
Puede usar las funciones skip
y take
como se muestra a continuación:
$products = $art->products->skip($offset*$limit)->take($limit)->get();
// skip
debe pasar param como valor entero para omitir los registros y el índice de inicio
// take
obtiene un valor entero para obtener el no. de registros después de iniciar el índice definido por skip
EDITAR
Lo siento. Fui mal entendido con tu pregunta. Si desea algo como la paginación, el método forPage
funcionará para usted. El método forPage funciona para colecciones.
REf: https://laravel.com/docs/5.1/collections#method-forpage
p.ej
$products = $art->products->forPage($page,$limit);
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
Desde laravel doc 5.2 https://laravel.com/docs/5.2/queries#ordering-grouping-limit-and-offset
saltar / tomar
Para limitar el número de resultados devueltos por la consulta, o para omitir un número dado de resultados en la consulta (OFFSET), puede usar los métodos de omitir y tomar:
$users = DB::table(''users'')->skip(10)->take(5)->get();
En laravel 5.3 puede escribir ( https://laravel.com/docs/5.3/queries#ordering-grouping-limit-and-offset )
$products = $art->products->offset(0)->limit(10)->get();