ترحيلات قواعد البيانات في PHP: دليل شامل للأدوات والمكتبات
\n\nتطوير تطبيقات الويب بلغة PHP يرتبط ارتباطًا وثيقًا بإدارة هيكل قاعدة البيانات. أثناء تطور المشروع، يتغير مخطط قاعدة البيانات باستمرار: تُضاف جداول جديدة، وتتغير الحقول، وتُدخل الفهارس. يؤدي التنفيذ اليدوي لاستعلامات SQL في بيئات مختلفة (البيئة المحلية، بيئة الاختبار، بيئة الإنتاج) إلى أخطاء وفقدان البيانات والارتباك. حل هذه المشكلة هو ترحيلات قواعد البيانات - وهي طريقة برمجية لإدارة إصدارات وتطبيق تغييرات المخطط.
\n\nما هي الترحيلات ولماذا نحتاجها؟
\nالترحيل هو كلاس PHP يحتوي على طريقتين: up() (تطبيق التغييرات) و down() (التراجع عن التغييرات). كل ترحيل له معرف فريد (عادةً طابع زمني) ويتم تنفيذه بالتسلسل. المزايا الرئيسية لاستخدام الترحيلات:
- \n
- إدارة إصدارات مخطط قاعدة البيانات - يتم تخزين تاريخ التغييرات بالكامل في الكود (عادةً في Git). \n
- أتمتة النشر - يكفي تنفيذ أمر واحد لتحديث قاعدة البيانات على أي خادم. \n
- الأمان - إمكانية التراجع عن التغييرات غير الناجحة. \n
- العمل الجماعي - يقوم جميع المطورين بمزامنة هيكل قاعدة البيانات تلقائيًا. \n
المكتبات الشائعة للترحيلات في PHP
\nدعنا نستعرض ثلاث أدوات الأكثر شيوعًا: Phinx، Doctrine Migrations، و Laravel Migrations المدمجة.
\n\n1. Phinx (robmorgan/phinx)
\nPhinx هي أداة مستقلة عن الإطار للترحيلات والتعبئة (ملء البيانات الاختبارية). تدعم MySQL، PostgreSQL، SQLite، SQL Server وأنظمة إدارة قواعد بيانات أخرى. يتم التثبيت عبر Composer:
\ncomposer 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
2. Doctrine Migrations
\nDoctrine Migrations هي جزء من نظام Doctrine ORM البيئي، ولكن يمكن استخدامها بدونه أيضًا. تتميز بتكامل قوي مع Doctrine DBAL (طبقة قاعدة البيانات المجردة). التثبيت:
\ncomposer 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