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

    Команда Simple-Server
    03.06.2026
    10 мин

    Материал подготовлен командой Simple-Server для администраторов VPS и выделенных серверов. Команды и пути проверяйте на тестовой машине перед production.

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

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

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

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

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

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

    wsl --set-version Ubuntu 2

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

    PS C:\WINDOWS\system32> wsl.exe -l -v NAME      STATE           VERSION * Ubuntu    Stopped         2

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

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

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

    dism.exe /online /enable-feature /featurename:Microsoft-Windows-Subsystem-Linux /all /norestart

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

    dism.exe /online /enable-feature /featurename: VirtualMachinePlatform /all /norestart

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

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

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

    wsl --set-default-version 2

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

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

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

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

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

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

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

    curl -s https://laravel.build/example-app | bash

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

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

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

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

    Если у вас возникла ошибка “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 командой:

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

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

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

    ./vendor/bin/sail up -d     //запуск приложения в фоновом режиме ./vendor/bin/sail artisan migrate  Migration table created successfully. Migrating: 2014_10_12_000000_create_users_table Migrated:  2014_10_12_000000_create_users_table (1,846.42ms) Migrating: 2014_10_12_100000_create_password_resets_table Migrated:  2014_10_12_100000_create_password_resets_table (1,965.53ms) Migrating: 2019_08_19_000000_create_failed_jobs_table Migrated:  2019_08_19_000000_create_failed_jobs_table (2,196.68ms) Migrating: 2019_12_14_000001_create_personal_access_tokens_table Migrated:  2019_12_14_000001_create_personal_access_tokens_table (3,325.95ms)

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

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

    DB_CONNECTION=mysql DB_HOST=mysql DB_PORT=3306 DB_DATABASE=example_app DB_USERNAME=sail DB_PASSWORD=password

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

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

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

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

    ./vendor/bin/sail artisan make:migration example_migr Created Migration: 2022_06_02_005033_example_migr

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

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

    <?php use Illuminate\Database\Migrations\Migration; use Illuminate\Database\Schema\Blueprint; use Illuminate\Support\Facades\Schema; return new class extends Migration { /** * Запуск миграции * * @return void */ public function up() { // } /** * Откат миграции * * @return void */ public function down() { // } };

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

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

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

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

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

    <?php use Illuminate\Database\Migrations\Migration; use Illuminate\Database\Schema\Blueprint; use Illuminate\Support\Facades\Schema; return new class extends Migration { /** *Запуск миграции. * * @return void */ public function up() { Schema::create('items', function (Blueprint $table) { $table->id(); $table->string('name'); $table->integer('count'); $table->integer('cost'); }); } /** * Откат миграции * * @return void */ public function down() { Schema::dropIfExists('items'); } };

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

    ./vendor/bin/sail artisan migrate Migrating: 2022_06_02_005033_example_migr Migrated:  2022_06_02_005033_example_migr (658.56ms)

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

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

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

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

    ./vendor/bin/sail artisan make:seeder ExampleSeeder Seeder created successfully.

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

    <?php namespace Database\Seeders; use Illuminate\Database\Console\Seeds\WithoutModelEvents; use Illuminate\Database\Seeder; class ExampleSeeder extends Seeder { /** * Run the database seeds. * * @return void */ public function run() { // } }

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

    <?php namespace Database\Seeders; use Illuminate\Database\Console\Seeds\WithoutModelEvents; use Illuminate\Support\Facades\DB; use Illuminate\Database\Seeder; use Illuminate\Support\Str; class ExampleSeeder extends Seeder { /** * Run the database seeds. * * @return void */ public function run() { for ($i = 1; $i <= 10; $i++) { DB::table('items')->insert([ 'id' => $i, 'name' => Str::random(5), 'cost' => rand(5,20), 'count' => rand(0,10), ]); } } }

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

    public function run() { $this->call(ExampleSeeder::class); }

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

    ./vendor/bin/sail artisan db:seed Seeding: Database\Seeders\ExampleSeeder Seeded:  Database\Seeders\ExampleSeeder (841.68ms) Database seeding completed successfully.

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


    Нужен сервер для практики? Арендуйте VPS/VDS в России — root-доступ, NVMe, DDoS-защита и поддержка 24/7.

    VPS для проекта

    VPS с root-доступом, NVMe и поддержкой 24/7 на Simple-Server.

    StarterVDS

    490

    в месяц

    1 ядро

    1 ГБ RAM

    20 ГБ NVMe

    • 1 IPv4
    • KVM
    • Root-доступ
    • Безлимитный трафик
    Заказать VPS
    Рекомендуем

    PerformanceVDS

    1190

    в месяц

    2 ядра

    4 ГБ RAM

    60 ГБ NVMe

    • 1 IPv4
    • KVM
    • Root-доступ
    • Базовая DDoS-защита
    Заказать VPS

    Нужна другая конфигурация или чистый VPS без панели?

    Все тарифы VPS

    Похожие статьи, которые могут быть вам интересны