Увійти Реєстрація
Блог Серії
Кар'єра
Вакансії Компанії
Навчання
Документація Співбесіди Тестування Відео
Екосистема
Пакети Ресурси Проєкти Інструменти Події
Інше
Про нас Реклама

Чим колекція Eloquent відрізняється від звичайної колекції?

Model::get() повертає Illuminate\Database\Eloquent\Collection - вона успадковує звичайну колекцію й додає методи для моделей.

$users = User::where('active', true)->get();

$users->find(7);                       // модель за первинним ключем, без запиту
$users->modelKeys();                   // [1, 7, 12]
$users->load('posts');                 // жадібно завантажити зв'язок для всіх
$users->loadCount('orders');
$users->contains($someUser);           // порівнює моделі за ключем
$users->fresh();                       // перечитати з бази
$users->toQuery()->update([...]);      // один запит за ключами колекції
$users->except([1, 7]);                // без моделей з цими ключами

Що важливо розуміти:

  • методи колекції працюють у пам'яті. $users->where('role', 'admin') фільтрує вже завантажене, а User::where('role', 'admin') - робить запит. Перше доречне для невеликої вибірки, друге - коли рядків багато;
  • деякі методи (map, pluck) повертають звичайну колекцію, якщо результат уже не моделі;
  • load() на колекції - спосіб прибрати N+1, коли моделі отримали без with().

Для власних методів ($orders->totalPaid()) моделі можна дати свою колекцію атрибутом #[CollectedBy].

Докладніше в документації: Доступні методи

Перевір себе

20 випадкових питань за спробу, після завершення - розбір кожної помилки

Схожі питання