雄辩的ORM获取最新物品查询

时间:2019-10-25 20:20:26

标签: laravel eloquent lumen

我正在尝试获取所有最新商品并按ID降序排序(即获取所有刚刚添加的商品(带有限制和偏移量))。

所以我做到了:

$products = Product::all()
                ->slice($request->get('offset'))
                ->take($request->get('limit'))
                ->sortByDesc('id')
                ->toBase();

但是,当我有更多的限制时,我似乎没有正确的顺序。它使我说10种产品,但未进行排序纠正。知道如何使用雄辩的ORM做到这一点吗?

2 个答案:

答案 0 :(得分:1)

我认为问题在于您首先使用::all(),它会返回Product中的所有Collection实例,然后使用集合方法。由于这些方法按使用顺序起作用,因此您在进行排序之前先进行切片和补偿,因此每次都将获得相同的产品。使用正确的Builder语法正确,更有效地处理此问题:

$products = Product::offset($request->input("offset"))
->limit($request->input("limit"))
->orderBy("id", "DESC")
->get();

由于这是一个Builder实例,该查询将根据您数据库的语法逻辑在一个查询中进行编译和执行。使用Collection逻辑没有什么错,您只需要使用正确的方法顺序即可(首先{sortByDesc(),然后是slice(),然后是take()),但这是效率极低,因为您必须处理数据库中的每个Product

答案 1 :(得分:1)

您可能打算让数据库处理偏移量并跳过和排序,而不是提取所有可能的记录,然后仅获取所需的内容,然后对它们进行排序...如果要按自己的方式进行操作,则需要顺便说一句,然后再跳过。

使用数据库进行过滤和排序:

$products = Product::skip($request->input('offset'))
    ->take($request->input('limit'))
    ->orderBy('id', 'desc')
    ->get();
相关问题