ترحيلات قواعد البيانات في PHP: دليل شامل للأدوات والمكتبات

مدرب بايثون أونلاين للمبتدئين

تعلم Python بسهولة دون إرهاق نظري. حل مهام عملية مع التحقق التلقائي واكتب الكود مباشرة في المتصفح.

ابدأ الدورة

ترحيلات قواعد البيانات في PHP: دليل شامل للأدوات والمكتبات

\n\n

تطوير تطبيقات الويب بلغة PHP يرتبط ارتباطًا وثيقًا بإدارة هيكل قاعدة البيانات. أثناء تطور المشروع، يتغير مخطط قاعدة البيانات باستمرار: تُضاف جداول جديدة، وتتغير الحقول، وتُدخل الفهارس. يؤدي التنفيذ اليدوي لاستعلامات SQL في بيئات مختلفة (البيئة المحلية، بيئة الاختبار، بيئة الإنتاج) إلى أخطاء وفقدان البيانات والارتباك. حل هذه المشكلة هو ترحيلات قواعد البيانات - وهي طريقة برمجية لإدارة إصدارات وتطبيق تغييرات المخطط.

\n\n

ما هي الترحيلات ولماذا نحتاجها؟

\n

الترحيل هو كلاس PHP يحتوي على طريقتين: up() (تطبيق التغييرات) و down() (التراجع عن التغييرات). كل ترحيل له معرف فريد (عادةً طابع زمني) ويتم تنفيذه بالتسلسل. المزايا الرئيسية لاستخدام الترحيلات:

\n
    \n
  • إدارة إصدارات مخطط قاعدة البيانات - يتم تخزين تاريخ التغييرات بالكامل في الكود (عادةً في Git).
  • \n
  • أتمتة النشر - يكفي تنفيذ أمر واحد لتحديث قاعدة البيانات على أي خادم.
  • \n
  • الأمان - إمكانية التراجع عن التغييرات غير الناجحة.
  • \n
  • العمل الجماعي - يقوم جميع المطورين بمزامنة هيكل قاعدة البيانات تلقائيًا.
  • \n
\n\n

المكتبات الشائعة للترحيلات في PHP

\n

دعنا نستعرض ثلاث أدوات الأكثر شيوعًا: Phinx، Doctrine Migrations، و Laravel Migrations المدمجة.

\n\n

1. Phinx (robmorgan/phinx)

\n

Phinx هي أداة مستقلة عن الإطار للترحيلات والتعبئة (ملء البيانات الاختبارية). تدعم MySQL، PostgreSQL، SQLite، SQL Server وأنظمة إدارة قواعد بيانات أخرى. يتم التثبيت عبر Composer:

\n
composer require robmorgan/phinx
\n

مثال على ترحيل لإنشاء جدول المستخدمين:

\n
<?php\nuse Phinx\\Migration\\AbstractMigration;\n\nclass CreateUsersTable extends AbstractMigration\n{\n    public function up()\n    {\n        $table = $this->table('users');\n        $table->addColumn('username', 'string', ['limit' => 50])\n              ->addColumn('email', 'string')\n              ->addColumn('password', 'string')\n              ->addColumn('created_at', 'datetime')\n              ->addIndex(['email'], ['unique' => true])\n              ->create();\n    }\n\n    public function down()\n    {\n        $this->table('users')->drop()->save();\n    }\n}
\n

توفر Phinx لغة DSL (لغة خاصة بالمجال) مريحة لوصف المخطط، بالإضافة إلى دعم مدمج للبذور (seeders). الأوامر الرئيسية:

\n
    \n
  • phinx migrate - تطبيق جميع الترحيلات الجديدة.
  • \n
  • phinx rollback - التراجع عن آخر ترحيل.
  • \n
  • phinx status - عرض حالة الترحيلات.
  • \n
  • phinx seed:run - ملء قاعدة البيانات ببيانات اختبارية.
  • \n
\n\n

2. Doctrine Migrations

\n

Doctrine Migrations هي جزء من نظام Doctrine ORM البيئي، ولكن يمكن استخدامها بدونه أيضًا. تتميز بتكامل قوي مع Doctrine DBAL (طبقة قاعدة البيانات المجردة). التثبيت:

\n
composer require doctrine/migrations
\n

مثال على ترحيل باستخدام Doctrine DBAL:

\n
<?php\nuse Doctrine\\DBAL\\Migrations\\AbstractMigration;\nuse Doctrine\\DBAL\\Schema\\Schema;\n\nclass Version20240101000000 extends AbstractMigration\n{\n    public function up(Schema $schema)\n    {\n        $table = $schema->createTable('users');\n        $table->addColumn('id', 'integer', ['autoincrement' => true]);\n        $table->addColumn('username', 'string', ['length' => 50]);\n        $table->addColumn('email', 'string');\n        $table->setPrimaryKey(['id']);\n        $table->addUniqueIndex(['email']);\n    }\n\n    public function down(Sc                    

توصيات