Eloquent ORM获取最新物品查询

Eloquent ORM get latest items query

我正在尝试获取所有最新项目并按 id 降序排序(即获取所有刚刚添加的具有限制和偏移量的项目)。

所以我这样做了:

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

然而,似乎当我有更多的限制时,我就没有正确的顺序。它让我说 10 种产品,但没有分类更正。知道如何使用 Eloquent ORM 做到这一点吗?

我认为问题是您首先使用 ::all(),returns ProductCollection 中的所有实例,然后使用收集方法。由于这些方法按使用顺序起作用,因此您在排序之前先进行切片和偏移,因此每次都会得到相同的产品。使用正确的 Builder 语法来正确且更有效地处理此问题:

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

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

您可能打算让数据库处理偏移量并跳过和排序,而不是提取所有可能的记录,然后只获取您想要的,然后对它们进行排序...如果您打算按自己的方式进行顺便说一句,在你跳过并采取之前需要排序。

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

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