HTML Diff
0 added 0 removed
Original 2026-01-01
Modified 2026-02-26
1 <p>Любое веб-приложение оперирует внутри себя понятиями предметной области: пользователь, статья, курс, урок и другими. Эти понятия связаны между собой и включены в различные процессы, например, регистрацию пользователя или публикацию статьи.</p>
1 <p>Любое веб-приложение оперирует внутри себя понятиями предметной области: пользователь, статья, курс, урок и другими. Эти понятия связаны между собой и включены в различные процессы, например, регистрацию пользователя или публикацию статьи.</p>
2 <p>За эту часть приложения (основную!) в Laravel отвечает ORM (название группы фреймворков или библиотек, которые помогают моделировать предметную область и связывать ее с базой данных). ORM в Laravel называется<a>Eloquent</a>. Это фреймворк внутри фреймворка, который определяет то, как создаются сущности, как они связываются друг с другом и каким образом все это отображается на базу данных.</p>
2 <p>За эту часть приложения (основную!) в Laravel отвечает ORM (название группы фреймворков или библиотек, которые помогают моделировать предметную область и связывать ее с базой данных). ORM в Laravel называется<a>Eloquent</a>. Это фреймворк внутри фреймворка, который определяет то, как создаются сущности, как они связываются друг с другом и каким образом все это отображается на базу данных.</p>
3 <p><em>Подробнее работа с ORM рассматривается в отдельном курсе, здесь же дается необходимый минимум.</em></p>
3 <p><em>Подробнее работа с ORM рассматривается в отдельном курсе, здесь же дается необходимый минимум.</em></p>
4 <p>Любая сущность, создаваемая внутри приложения, называется моделью. Модели в Laravel лежат в директории<em>app/Models</em>. Конкретный набор моделей зависит от приложения и может измениться со временем. На Хекслете таких моделей сотни, вот лишь некоторые, с которыми наши пользователи сталкиваются каждый день:</p>
4 <p>Любая сущность, создаваемая внутри приложения, называется моделью. Модели в Laravel лежат в директории<em>app/Models</em>. Конкретный набор моделей зависит от приложения и может измениться со временем. На Хекслете таких моделей сотни, вот лишь некоторые, с которыми наши пользователи сталкиваются каждый день:</p>
5 <ul><li>Пользователь</li>
5 <ul><li>Пользователь</li>
6 <li>Курс</li>
6 <li>Курс</li>
7 <li>Урок</li>
7 <li>Урок</li>
8 <li>Профессия</li>
8 <li>Профессия</li>
9 <li>Упражнение</li>
9 <li>Упражнение</li>
10 <li>Подписка</li>
10 <li>Подписка</li>
11 <li>Участник курса (Мембер)</li>
11 <li>Участник курса (Мембер)</li>
12 <li>Статья в блоге</li>
12 <li>Статья в блоге</li>
13 <li>Топик</li>
13 <li>Топик</li>
14 <li>Комментарий к топику</li>
14 <li>Комментарий к топику</li>
15 <li>Проект</li>
15 <li>Проект</li>
16 </ul><p><em>Важно не путать понятие модель во фреймворке, с понятием модель в MVC. Последнее это не класс, не файл, не функция, и не структура данных, а это слой приложения, отвечающий за модель предметной области. И это не про базу данных.</em></p>
16 </ul><p><em>Важно не путать понятие модель во фреймворке, с понятием модель в MVC. Последнее это не класс, не файл, не функция, и не структура данных, а это слой приложения, отвечающий за модель предметной области. И это не про базу данных.</em></p>
17 <p>Модели, как и большинство других частей приложения, создаются через утилиту<em>artisan</em>. Этот вызов создаст два файла:</p>
17 <p>Модели, как и большинство других частей приложения, создаются через утилиту<em>artisan</em>. Этот вызов создаст два файла:</p>
18 <h2>Миграция</h2>
18 <h2>Миграция</h2>
19 <p>Первый файл - миграция в директории<em>database/migrations</em>.</p>
19 <p>Первый файл - миграция в директории<em>database/migrations</em>.</p>
20 <p>Миграция - SQL-запрос, который выполняется в базе при любом ее изменении. В данном случае запрос создает таблицу<em>articles</em>. Это соглашение пришло в Laravel из Rails: для каждой модели создается таблица, где имя модели берется в нижнем регистре и множественном числе. Например,<em>Article</em>-<em>articles</em>или<em>Person</em>-<em>people</em>.</p>
20 <p>Миграция - SQL-запрос, который выполняется в базе при любом ее изменении. В данном случае запрос создает таблицу<em>articles</em>. Это соглашение пришло в Laravel из Rails: для каждой модели создается таблица, где имя модели берется в нижнем регистре и множественном числе. Например,<em>Article</em>-<em>articles</em>или<em>Person</em>-<em>people</em>.</p>
21 <p>Сама миграция не выглядит как SQL. Внутри нее используется библиотека, которая позволяет описывать изменения в базе в виде кода, который затем превращается в SQL. Структура этого кода достаточно проста, если знать PHP. В нем описывается таблица, все ее колонки и их типы.</p>
21 <p>Сама миграция не выглядит как SQL. Внутри нее используется библиотека, которая позволяет описывать изменения в базе в виде кода, который затем превращается в SQL. Структура этого кода достаточно проста, если знать PHP. В нем описывается таблица, все ее колонки и их типы.</p>
22 <p>По умолчанию Laravel добавляют в миграцию два вызова:</p>
22 <p>По умолчанию Laravel добавляют в миграцию два вызова:</p>
23 <ul><li>$table-&gt;id(); - колонка, которая будет первичным ключом.</li>
23 <ul><li>$table-&gt;id(); - колонка, которая будет первичным ключом.</li>
24 <li>$table-&gt;timestamps() - два поля:<em>updated_at</em>(время последнего обновления) и<em>created_at</em>(время добавления). Это стандартная практика для многих фреймворков, эти колонки добавляются во все таблицы для удобства отслеживания дат.</li>
24 <li>$table-&gt;timestamps() - два поля:<em>updated_at</em>(время последнего обновления) и<em>created_at</em>(время добавления). Это стандартная практика для многих фреймворков, эти колонки добавляются во все таблицы для удобства отслеживания дат.</li>
25 </ul><p>Остальные колонки нужно добавлять самостоятельно. Для статей полная миграция выглядит так:</p>
25 </ul><p>Остальные колонки нужно добавлять самостоятельно. Для статей полная миграция выглядит так:</p>
26 <p>Миграции не выполняются автоматически. Их нужно "применять" или, как говорят "накатывать" на базу данных. Команда php artisan migrate находит все миграции, которые еще не были применены и выполняет их все в том порядке, в котором они расположены в файловой системе.</p>
26 <p>Миграции не выполняются автоматически. Их нужно "применять" или, как говорят "накатывать" на базу данных. Команда php artisan migrate находит все миграции, которые еще не были применены и выполняет их все в том порядке, в котором они расположены в файловой системе.</p>
27 <p>Если все прошло успешно, то в базе данных появилась таблица<em>articles</em>.</p>
27 <p>Если все прошло успешно, то в базе данных появилась таблица<em>articles</em>.</p>
28 <p>Миграции можно не только накатывать, но и откатывать. Для этого нужно набрать php artisan migrate:rollback. Эта команда попробует отменить последнюю миграцию. Повторный вызов откатит еще одну миграцию, которая была перед последней. И так далее до самого конца.</p>
28 <p>Миграции можно не только накатывать, но и откатывать. Для этого нужно набрать php artisan migrate:rollback. Эта команда попробует отменить последнюю миграцию. Повторный вызов откатит еще одну миграцию, которая была перед последней. И так далее до самого конца.</p>
29 <p>Теперь можно переходить к модели.</p>
29 <p>Теперь можно переходить к модели.</p>
30 <h2>Модель</h2>
30 <h2>Модель</h2>
31 <p>Второй файл - класс (модель) с именем<em>Article</em>в директории<em>app/Models</em></p>
31 <p>Второй файл - класс (модель) с именем<em>Article</em>в директории<em>app/Models</em></p>
32 <p>Модель в Laravel - это класс, который наследуется от<em>Model</em>. В самом простом случае, этот класс не содержит ни строчки кода. Большую часть работы по его функционированию берет на себя Eloquent. Эта ORM связывает класс с таблицей в базе данных и предоставляет множество необходимых методов, которых достаточно для большинства задач.</p>
32 <p>Модель в Laravel - это класс, который наследуется от<em>Model</em>. В самом простом случае, этот класс не содержит ни строчки кода. Большую часть работы по его функционированию берет на себя Eloquent. Эта ORM связывает класс с таблицей в базе данных и предоставляет множество необходимых методов, которых достаточно для большинства задач.</p>
33 <p>Подробнее о том как работает модель - в следующем уроке.</p>
33 <p>Подробнее о том как работает модель - в следующем уроке.</p>