Миграции
Что такое миграция
Миграция — это PHP-класс, который описывает изменение структуры базы данных. Миграции позволяют версионировать схему: создавать таблицы, добавлять колонки, менять индексы — и откатывать эти изменения. Одна и та же миграция работает на любой БД (MySQL, PostgreSQL, SQLite).
Создание
php artisan make:migration create_posts_table
Файл появится в database/migrations/ с именем, содержащим дату и время.
Структура миграции
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');
}
};
Метод up выполняется при накате, down — при откате.
Типы колонок
id()— автоинкрементный первичный ключstring('name', 100)— VARCHAR(100)text('body')— TEXTinteger('views')— INTbigInteger('count')— BIGINTboolean('active')— BOOLEANdecimal('price', 8, 2)— DECIMAL(8,2)date('birthday')— DATEdateTime('published_at')— DATETIMEtimestamp('created_at')— TIMESTAMPjson('meta')— JSONuuid('uuid')— UUIDenum('status', ['draft', 'published'])— ENUM
Модификаторы
$table->string('email')->unique();
$table->string('name')->nullable();
$table->integer('views')->default(0);
$table->string('slug')->index();
Внешние ключи
$table->foreignId('user_id')->constrained();
Создаёт колонку user_id типа BIGINT и внешний ключ на users.id. При удалении связанной записи поведение задаётся через cascadeOnDelete() или nullOnDelete().
Изменение существующей таблицы
php artisan make:migration add_status_to_posts_table --table=posts
public function up(): void
{
Schema::table('posts', function (Blueprint $table) {
$table->string('status')->default('draft')->after('title');
});
}
Команды
php artisan migrate # накатить все новые миграции
php artisan migrate:rollback # откатить последний батч
php artisan migrate:reset # откатить всё
php artisan migrate:fresh # снести все таблицы и накатить заново
php artisan migrate:status # показать статус миграций