Laravel 拉威尔雄辩的极限与偏移
这是我的Laravel 拉威尔雄辩的极限与偏移,laravel,eloquent,limit,offset,Laravel,Eloquent,Limit,Offset,这是我的 $art = Article::where('id',$article)->firstOrFail(); $products = $art->products; 我只想限制“产品” 这是错误的方式 $products = $art->products->offset($offset*$limit)->take($limit)->get(); 请帮我一把 谢谢 请像这样尝试 return Article::where('id'
$art = Article::where('id',$article)->firstOrFail();
$products = $art->products;
我只想限制“产品”
这是错误的方式
$products = $art->products->offset($offset*$limit)->take($limit)->get();
请帮我一把
谢谢 请像这样尝试
return Article::where('id',$article)->with(['products'=>function($products, $offset, $limit) {
return $products->offset($offset*$limit)->limit($limit);
}])
您可以使用
skip
和take
功能,如下所示:
$products = $art->products->skip($offset*$limit)->take($limit)->get();
//skip
应将param作为整数值传递,以跳过记录和开始索引
//take
获取一个整数值,以获取启动由skip定义的索引后的记录数
编辑
对不起。我被你的问题误解了。如果您需要类似分页的内容,forPage
方法将适合您。forPage方法适用于集合
例如
$products = $art->products->forPage($page,$limit);
来自laravel文件5.2
跳过/接受
限制查询返回的结果数,或跳过
给定查询中的结果数(偏移量),可以使用跳过
并采取以下措施:
$users=DB::table('users')->skip(10)->take(5)->get()代码>
在laravel 5.3中,你可以写()
请尝试以下示例代码:
$art = Article::where('id',$article)->firstOrFail();
$products = $art->products->take($limit);
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();
快速:
Laravel有一种快速分页方法paginate,它只需要传入每页显示的数据数
//使用页码
Book::orderBy('updated_at','desc')->paginate(8);
如何自定义分页:
您可以使用以下方法:偏移量
,限制
,跳过
,获取
- 偏移,限制:偏移设置从何处开始,限制要查询的数据量
- skip,take:skip跳过几段数据并获取大量数据
例如:
模型::偏移量(0)->限制(10)->get();
模型::skip(3)->take(3)->get()
//我在我的项目中使用它,效果很好~
类BookController扩展控制器
{
公共函数getList(请求$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();
返回$this->getResponse($books,count($books));
}
}
可能是这样
$products=$art->products->take($limit)->skip($offset)->get()代码>Laravel 8(这适用于7.16版)
这会对您有所帮助@SangTrần只需使用products()
而不是products
。正如Doan Tran提到的,应该在生成器上调用这些方法,而不是在集合上。集合没有方法skip
。请添加您正在使用的Laravel版本。有很多。谢谢,尼桑,但它不起作用。在我的数据库中,一篇文章通过“article_product”表有许多产品。我可以显示所有产品(例如与article_id=1相关的产品)集合没有skip
方法。对于行数小于限制的页面,这将返回空,因为其偏移超出范围。
$art = Article::where('id',$article)->firstOrFail();
$products = $art->products->take($limit);
Article::where([['user_id','=',auth()->user()->id]])
->where([['title','LIKE',"%".$text_val."%"]])
->orderBy('id','DESC')
->skip(0)
->take(2)
->get();
$collection = collect([1, 2, 3, 4, 5, 6, 7, 8, 9]);
$chunk = $collection->forPage(2, 3);
$chunk->all();
$art->products->skip($offset*$limit)->take($limit)->all();