Ошибки, сложный материал, вопросы >
Нашли опечатку или неточность?

Выделите текст, нажмите ctrl + enter и отправьте его нам. В течение нескольких дней мы исправим ошибку или улучшим формулировку.

Что-то не получается или материал кажется сложным?

Загляните в раздел «Обсуждение»:

  • задайте вопрос нашим менторам. Вы быстрее справитесь с трудностями и прокачаете навык постановки правильных вопросов, что пригодится и в учёбе, и в работе программистом;
  • расскажите о своих впечатлениях. Если курс слишком сложный, подробный отзыв поможет нам сделать его лучше;
  • изучите вопросы других учеников и ответы на них. Это база знаний, которой можно и нужно пользоваться.
Об обучении на Хекслете

Коллекции

Любая выборка, построенная с помощью языка запросов или связей, это объект, который позволяет получить выбранные данные через метод get(). Сами данные при этом ведут себя как массив объектов, но в реальности не являются массивом:

>>> $users = App\User::where('id', '>', 1)->get()
=> Illuminate\Database\Eloquent\Collection {#2399}

>>> $posts = App\User::find(1)->posts()->get();
=> Illuminate\Database\Eloquent\Collection {#2396}

Вместо массива Eloquent возвращает экземпляр Illuminate\Database\Eloquent\Collection. Это класс, расширяющий другой класс, Collection, созданный для упрощения обработки наборов данных. Он содержит внутри себя десятки удобных методов, с помощью которых данные можно фильтровать, сортировать, агрегировать и так далее.

<?php

// Сразу возвращает Collection
$users = App\User::all();

// Такую операцию правильно делать напрямую в базе данных
// Здесь она только для демонстрации
$names = $users->filter(function ($user) { // фильтруем
    return $user->active === true;
})
->map(function ($user) { // отображаем
    return $user->name;
});

В результате работы этого кода, внутри $names останутся имена активных пользователей.

Ниже посмотрим на некоторые полезные методы, которые могут пригодиться в повседневной работе:

<?php
$users = App\User::all();

// contains – проверяет, содержит ли коллекция объект с указанным идентификатором (id)
$users->contains(1); // true
$users->contains(3); // false

// unique – возвращает уникальные объекты
$users = $users->unique();

// modelKeys – возвращает список первичных ключей
$users->modelKeys();

// intersect – возвращает пересечение между двумя коллекциями
$users = $users->intersect(User::whereIn('id', [1, 2, 3])->get());

// diff – возвращает разницу между двумя коллекциями
$users = $users->diff(User::whereIn('id', [1, 2, 3])->get());

Это только верхушка айсберга. Более подробно нужно смотреть в официальной документации. Библиотека Collections относится к такому типу библиотек, в которые нужно постоянно заглядывать и изучать её возможности. В любом случае, её использование значительно сокращает количество кода и делает код качественнее.

Однако, с ней легко увлечься. Эта библиотека работает с коллекциями в памяти. То есть сначала данные выгружаются из базы и затем над ними производятся нужные преобразования. Если данных много, то приложение начнет потреблять очень много памяти и станет работать медленнее. Поэтому, все операции фильтрации, группировки и сортировки которые можно выполнить прямо в базе данных, нужно делать в базе данных. Коллекции в памяти должны быть небольшими.


Дополнительные материалы

  1. Коллекции в Laravel

<span class="translation_missing" title="translation missing: ru.web.courses.lessons.mentors.mentor_avatars">Mentor Avatars</span>

Остались вопросы? Задайте их в разделе «Обсуждение»

Вам ответят менторы из команды Хекслета или другие студенты.

Для полного доступа к курсу, нужна профессиональная подписка

Профессиональная подписка откроет полный доступ ко всем курсам, упражнениям и урокам Хекслета, даст возможность обращаться за помощью к менторам и пожизненный доступ к теории пройденных уроков. Подписку можно отменить в любой момент.

Получить доступ
115
курсов
892
упражнения
2241
час теории
3196
тестов

Зарегистрироваться

или войти в аккаунт

Курсы программирования для новичков и опытных разработчиков. Начните обучение бесплатно.

  • 115 курсов, 2000+ часов теории
  • 800 практических заданий в браузере
  • 250 000 студентов

Нажимая кнопку «Зарегистрироваться», вы даёте своё согласие на обработку персональных данных в соответствии с «Политикой конфиденциальности» и соглашаетесь с «Условиями оказания услуг».

Наши выпускники работают в компаниях:

Логотип компании Альфа Банк
Логотип компании Rambler
Логотип компании Bookmate
Логотип компании Botmother

Есть вопрос или хотите участвовать в обсуждении?

Зарегистрируйтесь или войдите в свой аккаунт

Нажимая кнопку «Зарегистрироваться», вы даёте своё согласие на обработку персональных данных в соответствии с «Политикой конфиденциальности» и соглашаетесь с «Условиями оказания услуг».