php - Laravel Eloquent Model::all() 函数中的默认顺序是什么?
问题描述
在 Laravel EloquentModel::all()
函数中,返回查询的默认顺序是什么?我问这个是因为我很确定它是按主键升序排列的,'id'
当你通过模型时默认会这样做
php artisan make:model Model -m
但是,当我这样称呼它时:
return $users = User::all();
我在浏览器中得到以下结果:
结果似乎没有任何属性的特定顺序。我完全知道我可以通过 id 来订购它们
return $users = User::orderBy('id', 'asc')->get();
但就在几天前,它们是自动订购的。是什么赋予了?
解决方案
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 顺序交付。同样,这是底层实现的产物,而不是依赖的东西。
推荐阅读
- bash - 如何将 iTunes 文件复制为原始 wav 文件
- c# - 我想在加载每个点时加载一个事件,但在页面出现之前调用该事件
- css - 双色JavaFX TableCell背景?
- bash - "${foo//@(...)/}" 仅在命令行中有效,在脚本中无效
- terraform - Terraform 资源分配
- javascript - 如何在适配框架上创建自定义组件/插件?
- python - 如何使用 pd.read_html 从数据框中删除列并将输出作为列表返回
- python - 根据时间拆分 .pcap 文件
- im4java - 当我使用 im4java 的 imagemagic montage 时,-tile row x clos 选项引发文件无法打开异常
- django - 静态文件集合 - 徽标导航栏不显示