Laravel Eloquent限制和抵消

时间:2016-02-26 03:59:00

标签: laravel eloquent limit offset

这是我的

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

我只是想限制产品' 这是错误的方式

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

请帮我一把!

谢谢!

9 个答案:

答案 0 :(得分:39)

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

  

跳过/接受

     

限制查询返回的结果数,或跳过a   在查询(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(); 

答案 1 :(得分:5)

您可以使用skiptake功能,如下所示:

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

// skip应该作为整数值传递param以跳过记录并开始索引

// take获取一个整数值来获取no。启动由skip

定义的索引后的记录

修改

对不起。我被你的问题误解了。如果您想要分页,forPage方法将适用于您。 forPage方法适用于集合。

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

<强> e.g

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

答案 2 :(得分:5)

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 :(得分:3)

快速:

Laravel具有快速分页方法,即分页,只需传递每页显示的数据数量即可。


//use the paginate
Book::orderBy('updated_at', 'desc')->paginate(8);

如何自定义分页:

您可以使用以下方法:offsetlimitskiptake

  • offset,limit:偏移设置从何处开始,限制了要查询的数据量

  • skip,take:skip跳过一些数据并获取大量数据

例如:


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


答案 4 :(得分:1)

也许是

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

答案 5 :(得分:0)

试试这个示例代码:

{{1}}

答案 6 :(得分:0)

$collection = collect([1, 2, 3, 4, 5, 6, 7, 8, 9]);

$chunk = $collection->forPage(2, 3);

$chunk->all();

答案 7 :(得分:0)

Laravel 8(适用于7.16版)

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

https://laravel.com/docs/8.x/collections#method-take

答案 8 :(得分:-1)

请尝试这样,

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