首页 > 解决方案 > Laravel Eloquent Model::all() 函数中的默认顺序是什么?

问题描述

在 Laravel EloquentModel::all()函数中,返回查询的默认顺序是什么?我问这个是因为我很确定它是按主键升序排列的,'id'当你通过模型时默认会这样做

php artisan make:model Model -m

但是,当我这样称呼它时:

return $users = User::all();

我在浏览器中得到以下结果:

雄辩的 all() 函数结果

结果似乎没有任何属性的特定顺序。我完全知道我可以通过 id 来订购它们

return $users = User::orderBy('id', 'asc')->get();

但就在几天前,它们是自动订购的。是什么赋予了?

标签: phplaravelpostgresqleloquent

解决方案


laravel 的默认排序顺序根本没有。它不应用默认的“ORDER BY”子句,这意味着它遵循 PostgreSQL 规则来处理无序结果。从这里这里的一些类似答案:

  • 当 ORDER BY 缺失时,不要依赖订单。

  • 如果您想要特定的订单,请始终指定 ORDER BY - 在某些情况下,引擎可以消除 ORDER BY,因为它如何执行其他步骤。

  • GROUP BY 强制 ORDER BY。(这违反了标准。可以通过使用 ORDER BY NULL 来避免。)

SELECT * FROM tbl-- 这将执行“表扫描”。如果该表从未有任何 DELETE/REPLACE/UPDATE,则记录将恰好按插入顺序排列,因此您观察到了什么。

如果您对 InnoDB 表执行相同的语句,它们将按 PRIMARY KEY 顺序而不是 INSERT 顺序交付。同样,这是底层实现的产物,而不是依赖的东西。


推荐阅读