在Laravel Eloquent Model::all()
函数中,返回查询的默认顺序是什么?我之所以这样问,是因为我很确定它是按主键升序排列的,当您通过该模型制作模型时,默认情况下'id'
会执行
php artisan make:model Model -m
但是,当我这样称呼它时:
return $users = User::all();
我在浏览器中得到以下结果:
任何属性的结果似乎都没有特定的顺序。 我完全知道我可以通过id按顺序订购
return $users = User::orderBy('id', 'asc')->get();
但是几天前,它们已被自动订购。有什么作用?
答案 0 :(得分:4)
laravel的默认排序顺序根本没有。它不应用默认的“ ORDER BY”子句,这意味着它遵循PostgreSQL规则以获得无序结果。来自一些类似的答案here和here:
在缺少ORDER BY时不要依赖顺序。
如果需要特定的订单,请始终指定ORDER BY-在某些情况下,引擎可以消除ORDER BY,因为它的方式 做其他步骤。
- GROUP BY强制ORDER BY。 (这违反了标准。可以通过使用ORDER BY NULL来避免。)
SELECT * FROM tbl
-这将执行“表扫描”。如果表有 从来没有任何DELETE / REPLACE / UPDATE,记录将恰好是 按插入顺序排列,因此可以观察到。如果您对InnoDB表执行了相同的语句,则它们会 已按PRIMARY KEY顺序而不是INSERT顺序交付。再次, 这是基础实现的产物,而不是 依靠。
答案 1 :(得分:0)
我很高兴地同意FrankerZ的回答,只要您想知道laravel在ORM下构造的查询是什么,DB侦听器将是最快的选择:
<?php
\DB::listen(function($sql) {
dump($sql);
});
W.r.t。这个问题会在您执行select * from users
时给出User::all()
。
注意:请根据您使用的laravel版本检查侦听功能,新旧版本中的参数计数会有所不同。