Раздел помощи SpaceWeb

Миграции в Laravel: что это и как с ними работать

29 ноя, 2024

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

Рассмотрим, как использовать миграции в Laravel и какие возможности они предоставляют.

Что такое Laravel

Laravel («Ларавел» или «Ларавель») – это популярный PHP-фреймворк, который используется для разработки веб-приложений. Основное преимущество Laravel – его упрощенный и выразительный синтаксис, который позволяет создавать мощные приложения с меньшими усилиями. Фреймворк придерживается архитектуры MVC (Model-View-Controller), что помогает организовать код и логически разделять компоненты приложения.

Laravel предоставляет широкий набор встроенных функций и инструментов, включая: 

  • миграции для работы с базой данных, 
  • систему маршрутизации, 
  • средства для аутентификации и авторизации пользователей, 
  • шаблонизатор Blade для построения динамических интерфейсов, 
  • встроенные системы тестирования. 

Один из ключевых компонентов – Eloquent ORM, который позволяет работать с базой данных, используя объектно-ориентированный подход, что делает взаимодействие с данными интуитивно понятным и лаконичным.

Еще одна особенность Laravel – его мощная экосистема, в которую входят дополнительные пакеты и инструменты, например, Laravel Passport для создания API, Laravel Horizon для мониторинга очередей, и Laravel Dusk для тестирования пользовательских интерфейсов. Благодаря этому разработчики могут быстро интегрировать в проект функции безопасности, очередей, отправки уведомлений и другие востребованные возможности.

Фреймворк также поддерживает удобную интеграцию с внешними сервисами, обеспечивает гибкость в работе с REST API и предлагает множество возможностей для масштабирования приложений. 

Как установить Laravel

В этом руководстве мы установим Laravel на Windows 10 с помощью Docker, который обеспечивает удобный запуск приложений в изолированных контейнерах. Сначала настроим подсистему Windows для Linux (WSL), затем установим Docker и, наконец, Laravel. 

В этом разделе подробно описаны шаги именно для Windows 10; для других операционных систем можно обратиться к официальной документации Laravel.

Шаг 1. Установка WSL

WSL позволяет запускать приложения Linux в операционной системе Windows, обеспечивая совместимость и удобство работы. Если ваша версия Windows 10 – 2004 и выше, то для быстрой установки достаточно выполнить следующую команду в PowerShell с правами администратора:

wsl --install

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

wsl --set-version Ubuntu 2

Проверить текущую версию можно с помощью команды:

wsl.exe -l -v

Пример вывода команды может быть следующим:

NAME      STATE           VERSION
* Ubuntu    Stopped         2

Важно! Чтобы узнать версию Windows, нажмите Win+R и введите winver. Если версия ниже 2004, команда wsl --install не сработает. В этом случае следуйте инструкции ниже (поддерживается версия 1903 с номером сборки 18362 и выше):

Откройте PowerShell от имени администратора и выполните команду, чтобы включить WSL:

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

Включите функцию виртуальной машины. Для этого в PowerShell пропишите:

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

Затем необходимо перезагрузить компьютер для завершения установки.

Перейдите по ссылке и скачайте пакет обновления ядра для Linux, а затем установите его.

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

wsl --set-default-version 2

Теперь вы можете выбрать и установить нужный дистрибутив Linux через Microsoft Store. После установки доступ к консоли выбранной операционной системы будет осуществляться через меню поиска в Windows.

Шаг 2. Установка и настройка Docker

Чтобы установить Docker Desktop, зайдите на сайт Docker, нажмите Download Docker Desktop и скачайте версию для Windows. 

В процессе установки поставьте галочку у Use WSL 2 instead of HYPER-V, чтобы активировать использование WSL 2.

После завершения установки откройте Docker и нажмите на значок настроек («шестеренка») в верхнем меню. 

Во вкладке General выберите нужные параметры, например, включите поддержку WSL2, и отключите опции, которые не нужны. 

После этого перейдите на вкладку Resources и включите интеграцию с Ubuntu, поставив соответствующую галочку. Нажмите Apply & Restart, чтобы Docker перезагрузился и применил новые настройки.

Шаг 3. Начните работу с Lavarel

Для создания нового приложения Laravel откройте терминал Ubuntu и введите следующую команду:

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

Где example-app – это папка, в которой будет находиться ваш новый проект Laravel. При первом запуске команда автоматически загрузит необходимые образы, если они еще не установлены.

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

cd example-app

Теперь запустим контейнеры Laravel Sail командой:

./vendor/bin/sail up

Процесс создания контейнеров может занять некоторое время, но последующие запуски будут значительно быстрее. После успешного запуска 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 с помощью команды:

sudo chmod 666 /var/run/docker.sock

Как работать с миграциями

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

Миграции позволяют:

  • легко разворачивать структуру базы данных для нового окружения или коллеги;
  • безопасно и последовательно изменять структуру БД без риска потери данных;
  • управлять изменениями в БД в формате контроля версий, синхронизируя их с изменениями в коде.

В Laravel миграции проекта сохраняются в каталоге ./database/migrations/. По умолчанию в новом приложении, развернутом с помощью Laravel Sail, уже присутствует несколько миграций, которые необходимы для базовой структуры базы данных.

Чтобы запустить миграции, откройте терминал Ubuntu и выполните следующие команды:

./vendor/bin/sail up -d     

./vendor/bin/sail artisan migrate

Где первая – это запуск приложения в фоновом режиме. 

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

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

Чтобы создать миграцию в Laravel, сначала сгенерируйте соответствующий класс, используя команду make:migration в терминале Ubuntu. Выполните команду:

./vendor/bin/sail artisan make:migration create_products_table

После выполнения появится сообщение о создании файла миграции:

Created Migration: 2023_07_15_142301_create_products_table

Название миграции включает временную метку и указанный вами заголовок, что помогает Laravel выполнять миграции в нужной последовательности. Откройте созданный файл в текстовом редакторе, чтобы приступить к редактированию.

Шаблон миграции содержит два метода: up() и down(). В методе up() описываются изменения, которые будут применены к базе данных при запуске миграции, а метод down() предназначен для отката этих изменений.

Пример базового шаблона миграции:

<?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()
    {
        //
    }
};

Допустим, вам нужно создать таблицу products с полями для хранения информации о товарах:

  • id – первичный ключ,
  • title – название товара,
  • price – цена,
  • quantity – количество на складе.

Код миграции для создания таблицы products может выглядеть так:

<?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('products', function (Blueprint $table) {
            $table->id();
            $table->string('title');
            $table->integer('quantity');
            $table->decimal('price', 8, 2);
        });
    }
    /**
     * Откат миграции
     *
     * @return void
     */
    public function down()
    {
        Schema::dropIfExists('products');
    }
};

Здесь метод Schema::create создает новую таблицу, а Schema::dropIfExists удаляет ее при откате миграции. 

Сохраните изменения в файле, а затем выполните миграцию в терминале:

./vendor/bin/sail artisan migrate

Если миграция выполнится успешно, терминал покажет такой результат:

Migrating: 2023_07_15_142301_create_products_table
Migrated:  2023_07_15_142301_create_products_table (472.89ms)

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

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

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

  • migrate:rollback откатывает последнюю выполненную команду migrate, то есть возвращает базу данных к состоянию перед последним запуском миграций. Чтобы откатить несколько миграций, используйте параметр --step, указав необходимое количество шагов. Например, введите --step=2, чтобы откатить последние два запуска миграций.
  • migrate:reset отменяет все миграции, возвращая базу данных к изначальному состоянию, в котором нет ни одной миграции. Эта команда полезна, если нужно полностью перезапустить все миграции с самого начала.
  • migrate:refresh сначала откатывает все миграции, а затем сразу запускает их заново. Подходит, если нужно проверить все миграции с самого начала, но без полного удаления таблиц, как в случае с  предыдущей командой. 
  • migrate:fresh удаляет все таблицы из базы данных, а затем выполняет команду migrate заново. Это приводит к полному восстановлению структуры базы данных, как будто она создается с нуля. Используйте ее, когда требуется полностью перезаписать базу данных.

Вывод

Миграции в Laravel – это удобный инструмент для управления структурой базы данных. Они позволяют разработчикам автоматически создавать и изменять таблицы, отслеживать изменения и откатывать их, обеспечивая полный контроль над версионированием базы данных. 

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