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();