ترحيلات قواعد البيانات في 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 development2. Doctrine Migrations (doctrine/migrations)
Doctrine Migrations هي جزء من نظام Doctrine ORM. وهي مثالية للمشاريع التي تستخدم Doctrine بالفعل. تدعم جميع أنظمة إدارة قواعد البيانات الشائعة.
التثبيت:
composer require doctrine/migrationsالإعداد (migrations.php):
<?phpreturn [ '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->se