Истории успеха наших клиентов — лучшие проекты
Вход/ Регистрация

Миграции и сидеры Laravel: настройка базы данных

4825
10 минут чтения
Средний рейтинг статьи: 5

Миграции и сидеры — это два инструмента в PHP-фреймворке Laravel, которые упрощают работу с БД и решают проблемы, связанные с несогласованностью.

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

Сидеры в Laravel — это инструмент для наполнения базы данных тестовыми данными. Есть несколько классов наполнителей, которые позволяют контролировать процесс наполнения.

Прочитав эту статью, вы узнаете как начать работу в Laravel и создавать миграции и сидеры.

Установка и настройка Laravel

В этом обучающем материале мы будем использовать Docker для запуска приложения Laravel. Специально для Docker есть интерфейс командной строки Laravel Sail. Он по умолчанию встроен в пакет Laravel.

Устанавливать всё ПО будем на Windows 10. В этом мануале мы собрали полноценную инструкцию действий из различных материалов Microsoft, Docker и Laravel. Сначала мы установим WSL, затем Docker и уже Laravel. Ниже будет описаны действия конкретно для Windows 10, инструкцию для остальных операционных систем вы найдете в документации Laravel.

Установка WSL

WSL(Windows Subsystem for Linux) — это программная прослойка для запуска Linux-приложений на Windows.

Если у вас версия Windows 10 2004 и выше, то для установки достаточно выполнить эту команду в PowerShell от имени администратора:

    

По умолчанию используется дистрибутив Ubuntu. Нам нужна WSL 2, поэтому дополнительно изменим версию. Процесс займет несколько минут:

    

Для проверки версии используем команду wsl.exe -l -v:

    

Чтобы проверить версию Windows, нажмите Win+R и введите команду winver. Появится такое окно:

Image8

Если версия ниже, чем 2004, то команда wsl --install не сможет установить WSL. Вот список действий для старых версий (как минимум нужна версия 1903 со сборкой 18362):

Включаем подсистему Windows для Linux

Открываем PowerShell от имени администратора и выполняем эту команду:

    

Включаем функцию виртуальной машины

В ранее открытом терминале PowerShell выполняем такую команду:

    

Перезагружаем компьютер

Для завершения установки.

Загружаем и устанавливаем пакет обновления ядра Linux

После перехода по этой ссылке начнется загрузка пакета обновления. Установите его.

Выбираем WSL 2 в качестве версии по умолчанию 

После перезагрузки снова открываем PowerShell от имени администратора и выполняем эту команду:

    

Устанавливаем дистрибутив Linux

Выберите необходимый дистрибутив, загрузите его из Microsoft Store и установите:

Image10

После установки вы сможете через меню поиска зайти в консоль выбранной вами ОС:

Image6

Установка Docker

Заходим на сайт docker.com, нажимаем «Get Started» и загружаем Docker Desktop для Windows. В процессе установки необходимо нажать галочку «Use WSL 2 instead HYPER-V»:

Image5

Настройка Docker

Открываем Docker, нажимаем на «шестеренку» на верхней панели и попадаем меню настроек:

Image1

На вкладке General отображены основные настройки. Здесь мы можем выбрать необходимые пункты (например включить WSL2) и отключить ненужное (например отправку статистики). После выставления настроек на этой вкладке переходим к «Resources». Здесь необходимо включить интеграцию с Ubuntu:

 Image4

После этого нажимаем на кнопку “Apply & Restart”. Докер перезагрузится с новыми настройками.

VDS и VPS

Гибкие виртуальные серверы с почасовым
биллингом по всему миру: Россия, Азия и Европа.

Laravel

Создадим новое приложение Laravel. Заходим в терминал Ubuntu и вводим такую команду:

    

example-app — каталог нового приложения Laravel. При первом выполнении команда не сможет найти необходимые образы и начнет их загрузку:

Image3

После завершения загрузки Laravel Sail станет доступен. Переходим в каталог проекта:

    

И создаем контейнеры Laravel Sail:

    

Создание контейнеров может затянуться, но в следующие запуски Sail будут проходить быстро. Sail будет запускать веб-приложение с информационными ресурсами Laravel на localhost:

Image12

Если у вас возникла ошибкаThe Stream Or File “/Var/Www/Html/Storage/Logs/Laravel.Log” Could Not Be Opened In Append Mode: Failed To Open Stream: Permission Denied”, то вам необходимо поменять права файла docker.sock командой:

sudo chmod 666 /var/run/docker.sock

Работы с миграциями

Как уже было сказано, миграции похожи на контроль версий. С помощью них пользователь может создавать и изменять схему базы данных или делать откаты. Миграции не определяют содержание таблиц (кроме ограничений). 

Laravel migration проекта хранятся в его каталоге по пути ./database/migrations/. В созданном приложении Laravel Sail изначально есть несколько миграций:

Image2

Попробуем запустить их и проверим результат. Заходим в терминал Ubuntu и прописываем:

    

Вывод:

    

Миграции в Laravel выполняются в порядке их создания. Это позволяет Laravel корректно реализовывать механизм откатов. Запуск миграций “костыльными” путями по отдельности может привести к потере данных в БД.

Проверим, создались ли соответствующие таблицы в базе данных. Подключимся к базе данных через Heidi SQL. Параметры подключения находятся файле конфигураций среды .env:

    

Параметры можно задать другие.

Подключившись к бд, мы увидим текущее состояние базы данных:

Image7

Теперь создадим новую миграцию и разберемся, как она работает.

Создание миграций

Сначала создадим класс миграции. Для этого выполняем команду make:migration в терминале Ubuntu:

    

Вывод:

    

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

Теперь откройте созданный файл в любом удобном вам редакторе:

    

В миграциях используется два метода: up() и down().

В методе up() описываются изменения БД, которые необходимо выполнить при запуске миграции.  Метод down() отменяет изменения, сделанные up().

Напишем код миграции для создания таблицы товаров со следующими столбцами:

  • id — primary key;
  • name — название товара;
  • cost — цена товара;
  • count — количество товара на складе;

Вот код миграции для этой таблицы:

    

Schema::create создает новую таблицу. Schema::dropIfExists удаляет таблицу, если она существует. Сохраним изменения в файле и выполним снова миграцию через терминал:

    

Image11

Откат миграций

Для отката миграций есть несколько команд:

  • migrate:rollback — откат последней команды migrate. Также можно откатить некоторое количество выполнений migrate с помощью параметра --steps [число];
  • migrate:reset — откат всех миграций;
  • migrate:refresh — откат всех миграций и выполнение migrate;
  • migrate:fresh — удаление всех таблиц из БД и выполнение migrate.

Сидеры

На данный момент в базе данных только пустые таблицы. Их можно наполнить с помощью сидеров. Сидеры необходимы для наполнения базы данных фиктивными или тестовыми данными.

Создать сидер можно с помощью команды make:seeder:

    

Все сидеры находятся в каталоге database/seeders. Переходим в него и открываем ExampleSeeder в редакторе:

    

В метод run() необходимо поместить код для генерации данных. Добавим в таблицу «items» 10 случайных записей:

    

С помощью команды insert() мы добавляем запись в таблицу «items». Но новые классы сидеров не запускаются автоматически. Его вызов необходимо добавить в главный класс DatabaseSeeder:

    

После этого можем запустить наполнение данными:

    

А вот результат в базе данных:

Image9

Разворачивайте свои проекты на Laravel
на VDS/VPS в Timeweb Cloud

Cloud MSK 15

477 ₽/мес

Процессор
1 x 3.3 ГГц
Память
1 ГБ
NVMe
15 ГБ
Канал
1 Гбит/с
Публичный IP
Cloud MSK 30

657 ₽/мес

Процессор
1 x 3.3 ГГц
Память
2 ГБ
NVMe
30 ГБ
Канал
1 Гбит/с
Публичный IP

Заключение

Мы рассмотрели такие инструменты фреймворка Laravel, как миграции и сидеры, которые упрощают работу с базами данных. А сервер для любых экспериментов всегда можно арендовать на timeweb.cloud.

Кстати, в официальном канале Timeweb Cloud собрали комьюнити из специалистов, которые говорят про IT-тренды, делятся полезными инструкциями и даже приглашают к себе работать. 

4825
10 минут чтения
Средний рейтинг статьи: 5

Читайте также

Хотите внести свой вклад?
Участвуйте в нашей контент-программе за
вознаграждение или запросите нужную вам инструкцию
img-server