PHP: Laravel
Теория: ORM
Любое веб-приложение оперирует внутри себя понятиями предметной области: пользователь, статья, курс, урок и другими. Эти понятия связаны между собой и включены в различные процессы, например, регистрацию пользователя или публикацию статьи.
За эту часть приложения (основную!) в Laravel отвечает ORM (название группы фреймворков или библиотек, которые помогают моделировать предметную область и связывать ее с базой данных). ORM в Laravel называется Eloquent. Это фреймворк внутри фреймворка, который определяет то, как создаются сущности, как они связываются друг с другом и каким образом все это отображается на базу данных.
Подробнее работа с ORM рассматривается в отдельном курсе, здесь же дается необходимый минимум.
Любая сущность, создаваемая внутри приложения, называется моделью. Модели в Laravel лежат в директории app/Models. Конкретный набор моделей зависит от приложения и может измениться со временем. На Хекслете таких моделей сотни, вот лишь некоторые, с которыми наши пользователи сталкиваются каждый день:
- Пользователь
- Курс
- Урок
- Профессия
- Упражнение
- Подписка
- Участник курса (Мембер)
- Статья в блоге
- Топик
- Комментарий к топику
- Проект
Важно не путать понятие модель во фреймворке, с понятием модель в MVC. Последнее это не класс, не файл, не функция, и не структура данных, а это слой приложения, отвечающий за модель предметной области. И это не про базу данных.
Модели, как и большинство других частей приложения, создаются через утилиту artisan. Этот вызов создаст два файла:
Миграция
Первый файл – миграция в директории database/migrations.
Миграция – SQL-запрос, который выполняется в базе при любом ее изменении. В данном случае запрос создает таблицу articles. Это соглашение пришло в Laravel из Rails: для каждой модели создается таблица, где имя модели берется в нижнем регистре и множественном числе. Например, Article – articles или Person – people.
Сама миграция не выглядит как SQL. Внутри нее используется библиотека, которая позволяет описывать изменения в базе в виде кода, который затем превращается в SQL. Структура этого кода достаточно проста, если знать PHP. В нем описывается таблица, все ее колонки и их типы.
По умолчанию Laravel добавляют в миграцию два вызова:
$table->id();– колонка, которая будет первичным ключом.$table->timestamps()– два поля: updated_at (время последнего обновления) и created_at (время добавления). Это стандартная практика для многих фреймворков, эти колонки добавляются во все таблицы для удобства отслеживания дат.
Остальные колонки нужно добавлять самостоятельно. Для статей полная миграция выглядит так:
Миграции не выполняются автоматически. Их нужно "применять" или, как говорят "накатывать" на базу данных. Команда php artisan migrate находит все миграции, которые еще не были применены и выполняет их все в том порядке, в котором они расположены в файловой системе.
Если все прошло успешно, то в базе данных появилась таблица articles.
Миграции можно не только накатывать, но и откатывать. Для этого нужно набрать php artisan migrate:rollback. Эта команда попробует отменить последнюю миграцию. Повторный вызов откатит еще одну миграцию, которая была перед последней. И так далее до самого конца.
Теперь можно переходить к модели.
Модель
Второй файл – класс (модель) с именем Article в директории app/Models
Модель в Laravel – это класс, который наследуется от Model. В самом простом случае, этот класс не содержит ни строчки кода. Большую часть работы по его функционированию берет на себя Eloquent. Эта ORM связывает класс с таблицей в базе данных и предоставляет множество необходимых методов, которых достаточно для большинства задач.
Подробнее о том как работает модель – в следующем уроке.

