Что такое миграции
Миграция — это 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 откатывает последний батч.