Laravel Предел и смещение
Это мое
$art = Article::where('id',$article)->firstOrFail();
$products = $art->products;
Я просто хочу взять лимит "продукт"
Это неверно.
$products = $art->products->offset($offset*$limit)->take($limit)->get();
Пожалуйста, дайте мне руку!
Спасибо!
Ответы
Ответ 1
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
Из laravel doc 5.2 https://laravel.com/docs/5.2/queries#ordering-grouping-limit-and-offset
пропустить/принять
Чтобы ограничить количество результатов, возвращаемых из запроса, или пропустить заданное количество результатов в запросе (OFFSET), вы можете использовать пропуск и принимать методы:
$users = DB::table('users')->skip(10)->take(5)->get();
В laravel 5.3 вы можете написать (https://laravel.com/docs/5.3/queries#ordering-grouping-limit-and-offset)
$products = $art->products->offset(0)->limit(10)->get();
Ответ 2
У laravel есть собственная функция skip
для offset
и take
за limit
. точно так же как ниже пример запроса laravel: -
Article::where([['user_id','=',auth()->user()->id]])
->where([['title','LIKE',"%".$text_val."%"]])
->orderBy('id','DESC')
->skip(0)
->take(2)
->get();
Ответ 3
Вы можете использовать функции skip
и take
как показано ниже:
$products = $art->products->skip($offset*$limit)->take($limit)->get();
//skip
должен быть передан param как целочисленное значение, чтобы пропустить записи и начальный индекс
//take
получает целочисленное значение, чтобы получить no. записей после начального индекса, определенного skip
РЕДАКТИРОВАТЬ
Сожалею. Я был неправильно понят вашим вопросом. Если вы хотите что-то вроде разбиения на forPage
метод forPage
будет работать для вас. Метод forPage работает для коллекций.
REf: https://laravel.com/docs/5.1/collections#method-forpage
например
$products = $art->products->forPage($page,$limit);
Ответ 4
Быстрый:
В Laravel есть быстрый метод разбивки на страницы, paginate, который должен передавать только количество данных, отображаемых на странице.
//use the paginate
Book::orderBy('updated_at', 'desc')->paginate(8);
Как настроить подкачку:
Вы можете использовать эти методы: offset
, limit
, skip
, take
-
смещение , предел: где начинается настройка смещения, ограничивая количество запрашиваемых данных
-
Пропустить , взять: пропустить несколько частей данных и занимает много данных
например:
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));
}
}
Ответ 5
Попробуйте этот пример кода:
$art = Article::where('id',$article)->firstOrFail();
$products = $art->products->take($limit);
Ответ 6
Может быть, это
$products = $art->products->take($limit)->skip($offset)->get();
Ответ 7
$collection = collect([1, 2, 3, 4, 5, 6, 7, 8, 9]);
$chunk = $collection->forPage(2, 3);
$chunk->all();
Ответ 8
Пожалуйста, попробуйте вот так,
return Article::where('id',$article)->with(['products'=>function($products, $offset, $limit) {
return $products->offset($offset*$limit)->limit($limit);
}])