Миграции баз данных в PHP: современные инструменты и практики
Миграции баз данных — это неотъемлемая часть современной разработки на PHP. Они позволяют командам разработчиков синхронизировать изменения схемы базы данных, отслеживать историю изменений и автоматически применять их на разных окружениях (локальная среда, стейджинг, продакшн). В этой статье мы рассмотрим основные библиотеки и инструменты для миграций в PHP, их установку, настройку и примеры использования.
Что такое миграции и зачем они нужны?
Миграция базы данных — это скрипт, который описывает изменение схемы: создание таблицы, добавление/удаление колонок, индексов, внешних ключей. Миграции позволяют:
- Версионировать изменения структуры БД вместе с кодом приложения.
- Автоматизировать развертывание на новых серверах.
- Откатывать изменения при необходимости.
- Работать в команде без конфликтов.
Популярные библиотеки для миграций в PHP
1. Phinx (robmorgan/phinx)
Phinx — одна из самых популярных независимых библиотек для миграций. Она не привязана к конкретному фреймворку и поддерживает MySQL, PostgreSQL, SQLite, SQL Server.
Установка через Composer:
composer require robmorgan/phinx
Создание файла конфигурации phinx.yml:
paths:
migrations: '%%PHINX_CONFIG_DIR%%/db/migrations'
seeds: '%%PHINX_CONFIG_DIR%%/db/seeds'
environments:
default_migration_table: phinxlog
default_database: development
development:
adapter: mysql
host: localhost
name: myapp_db
user: root
pass: ''
port: 3306
charset: utf8
Пример миграции (создание таблицы users):
<?php
use Phinx\Migration\AbstractMigration;
class CreateUsersTable extends AbstractMigration
{
public function change()
{
$table = $this->table('users', ['id' => false, 'primary_key' => ['id']]);
$table->addColumn('id', 'biginteger', ['identity' => true])
->addColumn('username', 'string', ['limit' => 50])
->addColumn('email', 'string', ['limit' => 100])
->addColumn('created_at', 'datetime')
->addColumn('updated_at', 'datetime', ['null' => true])
->addIndex(['email'], ['unique' => true])
->create();
}
}
Запуск миграций:
vendor/bin/phinx migrate -e development
2. Doctrine Migrations (doctrine/migrations)
Doctrine Migrations — часть экосистемы Doctrine ORM. Идеально подходит для проектов, уже использующих Doctrine. Поддерживает все популярные СУБД.
Установка:
composer require doctrine/migrations
Настройка (migrations.php):
<?php
return [
'table_storage' => [
'table_name' => 'doctrine_migration_versions',
],
'migrations_paths' => [
'App\Migrations' => './migrations',
],
'all_or_nothing' => true,
'transactional' => true,
'check_database_platform' => true,
];
Пример миграции:
<?php
namespace App\Migrations;
use Doctrine\DBAL\Schema\Schema;
use Doctrine\Migrations\AbstractMigration;
class Version20240101000000 extends AbstractMigration
{
public function up(Schema $schema): void
{
$table = $schema->createTable('products');
$table->addColumn('id', 'integer', ['autoincrement' => true]);
$table->addColumn('name', 'string', ['length' => 255]);
$table->addColumn('price', 'decimal', ['precision' => 10, 'scale' => 2]);
$table->setPrimaryKey(['id']);
}
public function down(Schema $schema): void
{
$schema->dropTable('products');
}
}
Команды для работы:
vendor/bin/doctrine-migrations migrate
vendor/bin/doctrine-migrations generate
vendor/bin/doctrine-migrations execute --down 'App\Migrations\Version20240101000000'
3. Laravel Migrations (встроенный инструмент)
Если вы используете Laravel, то встроенная система миграций — лучший выбор. Она тесно интегрирована с Eloquent ORM и Artisan CLI.
Создание миграции:
php artisan make:migration create_orders_table
Пример миграции:
<?php
use Illuminate\Database\Migrations\ Также в библиотеке
Отправка email на Rust: библиотеки lettre и mailparse для писем
Отправка email на Rust: библиотеки lettre и async-smtp для почтовых рассылок
Машинное обучение на C# (.NET): обзор библиотек ML.NET, Accord.NET, TensorFlow.NET