Разница между Eloquent\Model::get() и всеми ()

В чем разница между использованиями User::all() а также User::get() Красноречивый?

На Laravel API это описывает только all() на Eloquent\Model,
Может быть get() описано на Eloquent\Builder,

4 ответа

Решение

User::all() а также User::get() будет делать то же самое.

all() статический метод на Eloquent\Model, Все, что он делает, это создает новый объект запроса и вызывает get() в теме. С all()Вы не можете изменить выполненный запрос вообще (за исключением того, что вы можете выбрать столбцы для выбора, передав их в качестве параметров).

get() это метод на Eloquent\Builder объект. Если вам нужно изменить запрос, например, добавить предложение where, вам нужно использовать get(), Например, User::where('name', 'David')->get();,

Чтобы дополнительно уточнить, почему это работает, это потому, что в классе Model есть магический метод, который примет любой статический вызов, который не определен, создаст экземпляр, а затем вызовет метод для него.

Вы можете увидеть это в исходном коде здесь: https://github.com/laravel/framework/blob/5.6/src/Illuminate/Database/Eloquent/Model.php (строка 1580)

Это также объясняется в этом эпизоде ​​Laracast: https://laracasts.com/series/advanced-eloquent/episodes/3 (требуется подписка)

Я тоже был озадачен, когда впервые столкнулся с этим и не смог найти get() как статический метод. Но потом я вспомнил эпизод Laracast, который помог мне соединить точки.

get() используется, когда вы хотите добавить запросы, а all() используется для получения всех данных без использования каких-либо условий.

Пример всех():

      $query = Project::all();

Пример получения():

      $query = Project::select('id', 'name')->where('name', '')->orderBy('id', 'desc')->get();

В Eloquent от Laravel методы Eloquent\Model::get() и all() используются для извлечения всех записей из таблицы базы данных. Однако между этими двумя понятиями есть тонкая разница.

1.Красноречивый\Модель::get():

  • Метод get() более универсален, чем метод all().
  • Это позволяет вам связывать дополнительные методы для изменения запроса перед его выполнением. Например, вы можете использовать get() вместе с методамиwhere, orderBy, groupBy и другими методами построения запросов для фильтрации, сортировки или выполнения других операций с полученными данными.
  • Он возвращает экземпляр класса Illuminate\Database\Eloquent\Collection, который предоставляет дополнительные методы для работы с полученными данными, такие как сопоставление, фильтрация и т. д.

Пример:$users = User::where('active', true)->orderBy('created_at', 'desc')->get();

2.все():

  • Метод all() — это простой способ получить все записи из таблицы базы данных без каких-либо дополнительных операций построителя запросов. Он извлекает все строки таблицы как есть.

  • Он прост в использовании, но ему не хватает гибкости при объединении дополнительных методов построения запросов.

Пример:$users = User::all();

Итак, вкратце, используйте get(), когда вам нужно больше контроля над запросом или вы хотите применить дополнительные условия, порядок или группировку. Используйте all(), если вы хотите получить все записи из таблицы без каких-либо дополнительных операций построителя запросов.

Другие вопросы по тегам