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

时间:2019-02-05 00:56:15

标签: php laravel postgresql eloquent

在Laravel Eloquent Model::all()函数中,返回查询的默认顺序是什么?我之所以这样问,是因为我很确定它是按主键升序排列的,当您通过该模型制作模型时,默认情况下'id'会执行

php artisan make:model Model -m

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

return $users = User::all();

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

Eloquent all() function results

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

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

但是几天前,它们已被自动订购。有什么作用?

2 个答案:

答案 0 :(得分:4)

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

  
      
  • 在缺少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版本检查侦听功能,新旧版本中的参数计数会有所不同。

参考:Documentation Link