Разница между 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(), если вы хотите получить все записи из таблицы без каких-либо дополнительных операций построителя запросов.