Каково упорядочение по умолчанию в функции Laravel Eloquent Model :: all ()? - PullRequest
0 голосов
/ 05 февраля 2019

В функции Laravel Eloquent Model::all() каков порядок по умолчанию для возвращаемого запроса?Я спрашиваю об этом, потому что я почти уверен, что он в порядке возрастания по первичному ключу, который по умолчанию равен 'id', когда вы делаете модель через

php artisan make:model Model -m

Однако, когда я называю это так:

return $users = User::all();

В браузере я получаю следующие результаты:

Eloquent all() function results

Результаты, по-видимому, не имеют какого-либо определенного порядка по каким-либо атрибутам.Я полностью осознаю, что могу заказать их по идентификатору, выполнив

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

Но всего несколько дней назад они были заказаны автоматически.Что дает?

Ответы [ 2 ]

0 голосов
/ 05 февраля 2019

С большим согласием с ответом FrankerZ , я хотел бы добавить, всякий раз, когда вы задаетесь вопросом, какой уровень запросов структурируется в ORM, прослушиватель БД будет самым быстрым вариантом для использования:

<?php

\DB::listen(function($sql) {
    dump($sql);
});

Если ответить на этот вопрос, вы получите select * from users, когда вы выполните User::all().

Примечание. Проверьте функцию прослушивания в соответствии с используемой версией laravel, количество параметров в старшей и новой версиях различаетсяверсии.

Ссылка: Ссылка на документацию

0 голосов
/ 05 февраля 2019

Порядок сортировки по умолчанию для laravel просто ничего.Он не применяет стандартное предложение «ORDER BY», что означает, что он следует правилам PostgreSQL для неупорядоченных результатов.Из некоторых похожих ответов здесь и здесь :

  • Не зависят от порядка, если отсутствует ORDER BY.

  • Всегда указывайте ORDER BY, если вы хотите конкретный заказ - в некоторых ситуациях движок может исключить ORDER BY из-за того, как он выполняет какой-то другой шаг.

  • ГРУППА ПО Силам ORDER BY.(Это является нарушением стандарта. Этого можно избежать, используя ORDER BY NULL.)

SELECT * FROM tbl - это сделает «сканирование таблицы».Если в таблице никогда не было DELETEs / REPLACEs / UPDATEs, записи окажутся в порядке вставки, отсюда и то, что вы наблюдали.

Если бы вы сделали тот же оператор с таблицей InnoDB, они были бы доставлены в порядке PRIMARY KEY, а не в INSERT.Опять же, это артефакт базовой реализации, а не то, от чего зависеть.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...