Урок 01

Что такое миграции

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

Зачем нужны миграции

Без миграций схему БД обычно правят вручную через SQL-клиент. Это плохо:

  • Никто не знает, кто и когда изменил структуру
  • На другом сервере схема может отличаться
  • Откатить изменение сложно
  • Командная работа превращается в хаос

Миграции решают это: схема описывается кодом, который лежит в репозитории.

Как это работает

Каждая миграция — класс с двумя методами:

  • up() — применить изменение
  • down() — откатить

Laravel хранит в таблице migrations список применённых миграций. При запуске php artisan migrate он сравнивает файлы в database/migrations/ с записями в таблице и накатывает только новые.

Создание

php artisan make:migration create_posts_table

Файл появится в database/migrations/ с именем вида 2026_09_29_120000_create_posts_table.php.

Структура

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

return new class extends Migration
{
    public function up(): void
    {
        Schema::create('posts', function (Blueprint $table) {
            $table->id();
            $table->string('title');
            $table->text('body');
            $table->timestamps();
        });
    }

    public function down(): void
    {
        Schema::dropIfExists('posts');
    }
};

Команды

php artisan migrate            # накатить все новые
php artisan migrate:rollback   # откатить последний батч
php artisan migrate:reset      # откатить всё
php artisan migrate:fresh      # снести всё и накатить заново
php artisan migrate:refresh    # откатить и накатить
php artisan migrate:status     # статус миграций

Батчи

Миграции применяются батчами. Первый запуск migrate создаёт батч 1 со всеми миграциями. Следующий запуск с новыми файлами — батч 2. rollback откатывает последний батч.