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

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

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

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

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

ORM

Любое веб-приложение оперирует внутри себя понятиями предметной области: пользователь, статья, курс, урок и другими. Эти понятия связаны между собой и включены в различные процессы, например, регистрацию пользователя или публикацию статьи.

За эту часть приложения (основную!) в Laravel отвечает ORM (название группы фреймворков или библиотек, которые помогают моделировать предметную область и связывать её с базой данных). ORM в Laravel называется Eloquent. Это фреймворк внутри фреймворка, который определяет то, как создаются сущности, как они связываются друг с другом и каким образом все это отображается на базу данных.

Подробнее работа с ORM рассматривается в отдельном курсе, здесь же даётся необходимый минимум.

Любая сущность, создаваемая внутри приложения, называется моделью. Модели в Laravel лежат в директории app. Конкретный набор моделей зависит от приложения и может измениться со временем. На Хекслете таких моделей сотни, вот лишь некоторые, с которыми наши пользователи сталкиваются каждый день:

  • Пользователь
  • Курс
  • Урок
  • Профессия
  • Упражнение
  • Подписка
  • Участник курса (Мембер)
  • Статья в блоге
  • Топик
  • Комментарий к топику
  • Проект

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

Модели, как и большинство других частей приложения, создаются через утилиту artisan. Этот вызов создаст два файла:

$ php artisan make:model Article --migration
Model created successfully.
Created Migration: 2020_03_21_220908_create_articles_table

Миграция

Первый файл – миграция в директории database/migrations.

<?php

use Illuminate\Support\Facades\Schema;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Database\Migrations\Migration;

class CreateArticlesTable extends Migration
{
    /**
     * Run the migrations.
     *
     * @return void
     */
    public function up()
    {
        Schema::create('articles', function (Blueprint $table) {
            $table->id();
            $table->timestamps();
        });
    }

    /**
     * Reverse the migrations.
     *
     * @return void
     */
    public function down()
    {
        Schema::dropIfExists('articles');
    }
}

Миграция – SQL-запрос, который выполняется в базе при любом её изменении. В данном случае запрос создаёт таблицу articles. Это соглашение пришло в Laravel из Rails: для каждой модели создаётся таблица, где имя модели берётся в нижнем регистре и множественном числе. Например Articlearticles или Personpeople.

Сама миграция не выглядит как SQL. Внутри неё используется библиотека, которая позволяет описывать изменения в базе в виде кода, который затем превращается в SQL. Структура этого кода достаточна проста, если знать PHP. В нём описывается таблица, все её колонки и их типы.

По умолчанию Laravel добавляют в миграцию два вызова:

  • $table->id(); – колонка, которая будет первичным ключом.
  • $table->timestamps() – два поля: updated_at (время последнего обновления) и created_at (время добавления). Это стандартная практика для многих фреймворков, эти колонки добавляются во все таблицы для удобства отслеживания дат.

Остальные колонки нужно добавлять самостоятельно. Для статей полная миграция выглядит так:

<?php

Schema::create('articles', function (Blueprint $table) {
    $table->id();
    $table->string('name'); // название статьи
    $table->text('body'); // тело статьи
    $table->timestamps();
});

Миграции не выполняются автоматически. Их нужно "применять" или, как говорят "накатывать" на базу данных. Команда php artisan migrate находит все миграции, которые ещё не были применены и выполняет их все в том порядке, в котором они расположены в файловой системе.

$ php artisan migrate
Migrating: 2020_03_21_000000_create_articles_table
Migrated:  2020_03_21_000000_create_articles_table

Если все прошло успешно, то в базе данных появилась таблица articles.

Миграции можно не только накатывать, но и откатывать. Для этого нужно набрать php artisan migrate:rollback. Эта команда попробует отменить последнюю миграцию. Повторный вызов откатит ещё одну миграцию, которая была перед последней. И так далее до самого конца.

Теперь можно переходить к модели.

Модель

Второй файл – класс (модель) с именем Article в директории app

<?php

namespace App;

use Illuminate\Database\Eloquent\Model;

class Article extends Model
{
    //
}

Модель в Laravel – это класс который наследуется от Model. В самом простом случае, этот класс не содержит ни строчки кода. Большую часть работы по его функционированию берет на себя Eloquent. Эта ORM связывает класс с таблицей в базе данных и предоставляет множество необходимых методов, которых достаточно для большинства задач.

Подробнее о том как работает модель – в следующем уроке.

Самостоятельная работа

  1. Создайте модель Article
  2. Выполните миграции

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

  1. Eloquent
  2. Migration

<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 студентов

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

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

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

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

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

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