في هذا الدرس 6تصفّح المواضيع
بمجرد مشاركة ملف التهجير مع الفريق أو تشغيله في الإنتاج، لا يجوز تعديل ملفه القديم لإضافة أعمدة جديدة. بدلاً من ذلك، أنشئ ملف تهجير جديداً يستخدم الواجهة Schema::table لإلحاق الأعمدة بالجدول القائم مع إمكانية تحديد موقعها عبر معدل after.
- تعديل الجدول (Schema::table): فتح جدول موجود مسبقاً في قاعدة البيانات لتطبيق إضافات أو تغييرات هيكلية.
- تحديد الموقع (after): وضع العمود الجديد مباشرة بعد عمود محدد داخل جداول MySQL و MariaDB.
- الوضع في البداية (first): إدراج العمود الجديد كأول عمود في ترتيب الجدول عند الحاجة.
Schema::table('users', function (Blueprint $table) {
$table->string('phone', 25)
->nullable()
->after('email');
});
تتطور متطلبات الأعمال باستمرار مما يستدعي زيادة طول حقل نصي أو جعله اختيارياً أو إعادة تسميته أو حذفه نهائياً. يتيح ربط الدالة change في نهاية تعريف العمود تعديل خصائصه الحالية، بينما تتولى دالتا renameColumn و dropColumn التسمية والحذف.
- تحديث الخصائص (change): تعديل نوع العمود القائم أو طوله أو قبوله للفراغ مع الحفاظ على بياناته.
- إعادة التسمية (renameColumn): تغيير الاسم البرمجي للعمود من الاسم القديم إلى الجديد بأمان.
- حذف الأعمدة (dropColumn): إزالة عمود واحد أو مصفوفة أعمدة مستغنى عنها أو داخل دالة التراجع.
Schema::table('users', function (Blueprint $table) {
$table->string('name', 120)->nullable()->change();
$table->renameColumn('phone', 'mobile_phone');
$table->dropColumn(['legacy_code']);
});
بدون الفهارس تضطر قاعدة البيانات لفحص كافة صفوف الجدول واحداً تلو الآخر عند البحث، مما يبطئ الأداء بشدة مع زيادة البيانات. تتيح إضافة الفهارس المفردة أو المركبة عبر دالتي index و unique الوصول للسجلات المطلوبة بسرعة فائقة.
- الفهرس القياسي (index): إنشاء فهرس بحث سريع للأعمدة التي تتكرر في شروط التصفية والترتيب.
- الفهرس المركب (Composite Index): تمرير مصفوفة أعمدة لتسريع الاستعلامات التي تبحث بالعمودين معاً.
- حذف الفهرس (dropIndex): إزالة الفهرس بالاعتماد على تسمية Laravel القياسية عند التراجع.
Schema::table('orders', function (Blueprint $table) {
$table->index('status');
$table->index(['customer_id', 'created_at']);
$table->unique(['store_id', 'invoice_no']);
});
يتطلب التكامل العلائقي ربط السجلات الفرعية كالمقالات والطلبات بسجل أب صالح في جدول آخر. تنشئ الصيغة الحديثة المختصرة foreignId المتبوعة بالدالة constrained عموداً رقمياً مطابقاً للمفتاح الأساسي وتربطه تلقائياً بجدول الأب.
- عمود المفتاح الأجنبي (foreignId): إنشاء عمود BIGINT UNSIGNED يطابق تماماً نوع دالة id القياسية.
- الربط التلقائي (constrained): استنتاج اسم جدول الأب وعمود id تلقائياً من بادئة اسم العمود.
- تخصيص جدول الأب (Custom Table): تمرير اسم الجدول صراحةً لدالة constrained إذا اختلف عن الاسم القياسي.
Schema::create('posts', function (Blueprint $table) {
$table->id();
$table->foreignId('user_id')->constrained();
$table->string('title');
$table->timestamps();
});
عند حذف سجل أب، تحتاج قاعدة البيانات لتعليمات صريحة حول مصير السجلات الفرعية المرتبطة به. يتيح ربط دوال cascadeOnDelete أو nullOnDelete أو restrictOnDelete بعد دالة القيد فرض السلوك المطلوب مباشرة على مستوى محرك القاعدة.
- الحذف المتسلسل (cascadeOnDelete): حذف جميع السجلات الفرعية التابعة تلقائياً فور حذف سجل الأب.
- التحويل لفارغ (nullOnDelete): تفريغ قيمة المفتاح الأجنبي إلى NULL مع بقاء السجل الفرعي.
- منع الحذف (restrictOnDelete): رفض حذف السجل الأب طالما توجد سجلات فرعية مرتبطة به كالفواتير المالية.
Schema::create('comments', function (Blueprint $table) {
$table->id();
$table->foreignId('post_id')
->constrained()
->cascadeOnDelete();
$table->foreignId('editor_id')
->nullable()->constrained('users');
});
يحافظ الجمع بين تهجيرات التعديل الآمنة والفهارس المدروسة وقيود المفاتيح الأجنبية على سرعة وتماسك قواعد البيانات المتنامية. استعن بهذا الجدول المرجعي لاختيار دوال التعديل والفهرسة والتكامل المرجعي المناسبة في Laravel 12.
| وجه المقارنة الهندسي | الأسلوب اليدوي أو غير المحمي | معيار Laravel 12 الحديث |
|---|---|---|
| تطوير الجداول | تعديل الملفات القديمة أو تشغيل جمل ALTER يدوية غير موثقة | تهجيرات تعديل تراكمية عبر Schema::table والدالة change |
| سرعة البحث | غياب الفهارس مما يسبب مسحاً كاملاً وبطيئاً للجدول | إضافة فهارس مفردة ومركبة بوضوح عبر index و unique |
| صياغة المفتاح الأجنبي | كتابة جمل مطولة ومعقدة لتعريف العمود وربط القيد | صيغة مختصرة ومقروءة عبر foreignId->constrained |
| منع السجلات اليتيمة | بقاء سجلات فرعية معطوبة تشير لآباء محذوفين | تحديد سلوك الحذف بدقة عبر cascadeOnDelete أو restrictOnDelete |
Schema::table('posts', function (Blueprint $table) {
$table->dropForeign(['user_id']);
$table->dropColumn('user_id');
});
ملخص الدرس
حصاد الدرسمراجعة مركّزة لأهم المفاهيم والقواعد الهندسية التي أتقنتها في هذا الدرس قبل التطبيق العملي
ماذا تعلّمت في هذا الدرس؟
أتقنت في هذا الدرس حول «تعديل الجداول والفهارس وقيود المفاتيح الأجنبية في Laravel» مفاهيم إضافة أعمدة جديدة للجداول القائمة، وتعديل وإعادة تسمية وحذف الأعمدة، وبناء الفهارس المفردة والمركبة وفق معايير Laravel 12 الحديثة.
الخطوة التالية والدرس القادم
انتقل الآن إلى الدرس التالي «استعلام وتصفية السجلات بأمان عبر Query Builder في Laravel» للبناء التراكمي على ما تعلمته.
سجّل الدخول لحفظ تقدمك
تابع إنجاز المواضيع والمصطلحات والمهام، وكمّل من آخر خطوة على أي جهاز.
المصطلحات4
راجع المعنى، اشرحه لنفسك، ثم علّم البطاقة كمفهومة.
- 01 Foreign Constraints المفاتيح الأجنبية
- تعديل الجداول القائمة وإضافة الفهارس وبناء قيود المفاتيح الأجنبية عبر foreignId->constrained وفق أحدث معايير إطار العمل Laravel 12 مع أمثلة وتطبيقات عملية متدرجة.
- للمراجعة
- 02 Adding Columns to Existing Tables إضافة أعمدة جديدة للجداول القائمة
- المفهوم الهندسي والتطبيق العملي المباشر لقسم إضافة أعمدة جديدة للجداول القائمة في إطار العمل Laravel 12.
- للمراجعة
- 03 Updating Renaming and Dropping Columns تعديل وإعادة تسمية وحذف الأعمدة
- المفهوم الهندسي والتطبيق العملي المباشر لقسم تعديل وإعادة تسمية وحذف الأعمدة في إطار العمل Laravel 12.
- للمراجعة
- 04 Creating Single and Composite Indexes بناء الفهارس المفردة والمركبة
- المفهوم الهندسي والتطبيق العملي المباشر لقسم بناء الفهارس المفردة والمركبة في إطار العمل Laravel 12.
- للمراجعة
لا توجد بطاقات تطابق البحث والتصفية.
اقرأ البطاقات بحرية. سجّل الدخول لحفظ تقدم مراجعتك.
الاختصارات4
راجع المعنى، اشرحه لنفسك، ثم علّم البطاقة كمفهومة.
- 01 MVC MVC
- Model View Controller
- النمط المعماري الذي يفصل بين نماذج البيانات Models، وطبقات العرض Views، والمتحكمات Controllers في Laravel.
- للمراجعة
- 02 CLI CLI
- Command Line Interface
- واجهة سطر الأوامر التي تعمل عبر أداة php artisan لتوليد الملفات وإدارة التطبيق.
- للمراجعة
- 03 HTTP HTTP
- Hypertext Transfer Protocol
- بروتوكول نقل النص الفائق الذي ينظم طلبات المتصفح واستجابات خادم Laravel.
- للمراجعة
- 04 PSR PSR
- PHP Standards Recommendations
- المعايير القياسية للغة PHP مثل التحميل التلقائي PSR-4 التي يلتزم بها إطار العمل Laravel.
- للمراجعة
لا توجد بطاقات تطابق البحث والتصفية.
اقرأ البطاقات بحرية. سجّل الدخول لحفظ تقدم مراجعتك.
مهامك قبل الاختبار
خطوة صغيرة كل مرة. وإنجاز تقدر ترجع له.
-
اكتب ونفّذ المثال البرمجي المشروح في قسم «إضافة أعمدة جديدة للجداول القائمة» داخل مشروع Laravel 12 المحلي وتحقق من النتيجة.
-
بدّل بين الحالات الثلاث في المحاكي التفاعلي ضمن قسم «تعديل وإعادة تسمية وحذف الأعمدة» وقارن مخرجات التنفيذ.
تأشير المهمة إقرار منك بإتمامها، وليس تصحيحًا آليًا للكود. يُحفظ تقدمك في حسابك.
اختبر فهمك.
ووصلها للإتقان.
كل سؤال خطوة لقدّام. اختار، اكتب كود، وشوف نتيجتك فورًا.
أكمل المهام، واجمع كل الإجابات الصحيحة. أقل من 100%؟ راجع وأعد المحاولة.
الأسئلة متاحة للاطلاع. سجّل الدخول للتفاعل وحفظ تقدمك.
لمحة عن التحدي8 أسئلة تنتظرك +
ما الهدف الهندسي الأساسي من إضافة أعمدة جديدة للجداول القائمة في إطار العمل Laravel 12؟
يسهم إضافة أعمدة جديدة للجداول القائمة في تنظيم منطق التطبيق بأسلوب معياري آمن وقابل للصيانة في Laravel 12.
يساعد الالتزام باصطلاحات Laravel 12 الرسمية في قسم «تعديل وإعادة تسمية وحذف الأعمدة» على رفع جودة الكود وسهولة اختباره آلياً.
صواب؛ الالتزام بالمعايير القياسية في Laravel 12 يجعل الكود واضحاً وسهل الفحص والصيانة.
أي آلية في Laravel 12 تتولى إدارة بناء الفهارس المفردة والمركبة بشكل مباشر ومنظم؟
توفر طبقة إطار العمل وحاوية الخدمات في Laravel 12 الأدوات القياسية لإدارة بناء الفهارس المفردة والمركبة.
لماذا يُعد تطبيق بناء قيود المفاتيح الأجنبية القياسية مهماً عند بناء تطبيقات Laravel 12 جاهزة للإنتاج؟
لأنه يمنع الأخطاء البرمجية الخفية ويوحد سلوك التطبيق بين بيئتي التطوير والإنتاج.
في Laravel 12، يُنصح بكتابة مفاتيح الإنتاج السرية مباشرة داخل ملفات الكود المصدري المرفوعة إلى Git بدلاً من ملفات البيئة.
خطأ؛ يجب حفظ المفاتيح والبيانات السرية في متغيرات البيئة وعدم رفعها أبداً إلى مستودع Git.
ما المزايا الهندسية التي يحققها تطبيق إجراءات الحذف المتسلسل وفك الارتباط في Laravel 12؟ (اختر كل ما ينطبق)
يوفر فصلاً واضحاً للمسؤوليات، وأماناً أعلى أثناء التنفيذ، وتعاوناً أسهل بين أفراد الفريق.
يوظف إطار العمل Laravel 12 ميزات PHP 8 الحديثة مثل تحديد أنواع القيم المرجعة لجعل الكود أكثر وضوحاً وأماناً.
صواب؛ يعتمد Laravel 12 بشكل كامل على الصياغة الحديثة للغة PHP 8.2+ وسلامة الأنواع.
ما الفرق الجوهري بين معيار Laravel 12 الحديث والملفات اليدوية التقليدية في ملخص تعديل الجداول وقيود المفاتيح؟
يوفر Laravel 12 واجهات قياسية موحدة وحماية مدمجة تغني عن الكود اليدوي المعرض للأخطاء.