Laravel Eloquent Model::all() 函数中的 dafault 顺序是什么?

Art*_*ano 3 php postgresql laravel eloquent

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

php artisan make:model Model -m
Run Code Online (Sandbox Code Playgroud)

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

return $users = User::all();
Run Code Online (Sandbox Code Playgroud)

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

Eloquent all() 函数结果

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

return $users = User::orderBy('id', 'asc')->get();
Run Code Online (Sandbox Code Playgroud)

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

Fra*_*erZ 5

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 顺序传递。同样,这是底层实现的工件,而不是依赖的东西。