انتقل إلى محتوى الدرس
الدرس 31
دورة إطار العمل Laravel

تعديل الجداول والفهارس وقيود المفاتيح الأجنبية في LaravelModifying Tables Indexes and Foreign Key Constraints in Laravel

تعديل الجداول القائمة وإضافة الفهارس وبناء قيود المفاتيح الأجنبية عبر foreignId->constrained وفق أحدث معايير إطار العمل Laravel 12 مع أمثلة وتطبيقات عملية متدرجة.
أقسام الدرس
6
الأمثلة
6
اللغة
العربية
تاريخ النشر
غير محدد
المشاهدات
0
محتوى الدرس
في هذا الدرس 6تصفّح المواضيع

بمجرد مشاركة ملف التهجير مع الفريق أو تشغيله في الإنتاج، لا يجوز تعديل ملفه القديم لإضافة أعمدة جديدة. بدلاً من ذلك، أنشئ ملف تهجير جديداً يستخدم الواجهة Schema::table لإلحاق الأعمدة بالجدول القائم مع إمكانية تحديد موقعها عبر معدل after.

  • تعديل الجدول (Schema::table): فتح جدول موجود مسبقاً في قاعدة البيانات لتطبيق إضافات أو تغييرات هيكلية.
  • تحديد الموقع (after): وضع العمود الجديد مباشرة بعد عمود محدد داخل جداول MySQL و MariaDB.
  • الوضع في البداية (first): إدراج العمود الجديد كأول عمود في ترتيب الجدول عند الحاجة.
مخطط معماري يوضح تعديل الجداول والفهارس وقيود المفاتيح الأجنبية في Laravel في إطار العمل Laravel 12
PHP
Schema::table('users', function (Blueprint $table) {
    $table->string('phone', 25)
        ->nullable()
        ->after('email');
});

تتطور متطلبات الأعمال باستمرار مما يستدعي زيادة طول حقل نصي أو جعله اختيارياً أو إعادة تسميته أو حذفه نهائياً. يتيح ربط الدالة change في نهاية تعريف العمود تعديل خصائصه الحالية، بينما تتولى دالتا renameColumn و dropColumn التسمية والحذف.

  • تحديث الخصائص (change): تعديل نوع العمود القائم أو طوله أو قبوله للفراغ مع الحفاظ على بياناته.
  • إعادة التسمية (renameColumn): تغيير الاسم البرمجي للعمود من الاسم القديم إلى الجديد بأمان.
  • حذف الأعمدة (dropColumn): إزالة عمود واحد أو مصفوفة أعمدة مستغنى عنها أو داخل دالة التراجع.
PHP
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 القياسية عند التراجع.
PHP
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 إذا اختلف عن الاسم القياسي.
PHP
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): رفض حذف السجل الأب طالما توجد سجلات فرعية مرتبطة به كالفواتير المالية.
PHP
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
PHP
Schema::table('posts', function (Blueprint $table) {
    $table->dropForeign(['user_id']);
    $table->dropColumn('user_id');
});
خلاصة المعرفة ومحطة الانتقال

ملخص الدرس

حصاد الدرس

مراجعة مركّزة لأهم المفاهيم والقواعد الهندسية التي أتقنتها في هذا الدرس قبل التطبيق العملي

ماذا تعلّمت في هذا الدرس؟

أتقنت في هذا الدرس حول «تعديل الجداول والفهارس وقيود المفاتيح الأجنبية في Laravel» مفاهيم إضافة أعمدة جديدة للجداول القائمة، وتعديل وإعادة تسمية وحذف الأعمدة، وبناء الفهارس المفردة والمركبة وفق معايير Laravel 12 الحديثة.

الخطوة التالية والدرس القادم

انتقل الآن إلى الدرس التالي «استعلام وتصفية السجلات بأمان عبر Query Builder في Laravel» للبناء التراكمي على ما تعلمته.

مشاركة

هل كان هذا الدرس مفيدًا؟

جارٍ تحميل الآراء…

ابنِ لغتك البرمجية

المصطلحات4

راجع المعنى، اشرحه لنفسك، ثم علّم البطاقة كمفهومة.

0 / 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

راجع المعنى، اشرحه لنفسك، ثم علّم البطاقة كمفهومة.

0 / 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.
للمراجعة

اقرأ البطاقات بحرية. سجّل الدخول لحفظ تقدم مراجعتك.

من الفهم للتطبيق

مهامك قبل الاختبار

خطوة صغيرة كل مرة. وإنجاز تقدر ترجع له.

0/2مهام منجزة
  1. اكتب ونفّذ المثال البرمجي المشروح في قسم «إضافة أعمدة جديدة للجداول القائمة» داخل مشروع Laravel 12 المحلي وتحقق من النتيجة.

  2. بدّل بين الحالات الثلاث في المحاكي التفاعلي ضمن قسم «تعديل وإعادة تسمية وحذف الأعمدة» وقارن مخرجات التنفيذ.

تأشير المهمة إقرار منك بإتمامها، وليس تصحيحًا آليًا للكود. يُحفظ تقدمك في حسابك.

مساحة التحدي

اختبر فهمك.
ووصلها للإتقان.

كل سؤال خطوة لقدّام. اختار، اكتب كود، وشوف نتيجتك فورًا.

8أسئلة 3أنواع تحديات 100%هدف الإتقان
تصحيح تلقائي. فرص بلا حدود.

أكمل المهام، واجمع كل الإجابات الصحيحة. أقل من 100%؟ راجع وأعد المحاولة.

الأسئلة متاحة للاطلاع. سجّل الدخول للتفاعل وحفظ تقدمك.

لمحة عن التحدي8 أسئلة تنتظرك
01

ما الهدف الهندسي الأساسي من إضافة أعمدة جديدة للجداول القائمة في إطار العمل Laravel 12؟

يسهم إضافة أعمدة جديدة للجداول القائمة في تنظيم منطق التطبيق بأسلوب معياري آمن وقابل للصيانة في Laravel 12.

02

يساعد الالتزام باصطلاحات Laravel 12 الرسمية في قسم «تعديل وإعادة تسمية وحذف الأعمدة» على رفع جودة الكود وسهولة اختباره آلياً.

صواب؛ الالتزام بالمعايير القياسية في Laravel 12 يجعل الكود واضحاً وسهل الفحص والصيانة.

03

أي آلية في Laravel 12 تتولى إدارة بناء الفهارس المفردة والمركبة بشكل مباشر ومنظم؟

توفر طبقة إطار العمل وحاوية الخدمات في Laravel 12 الأدوات القياسية لإدارة بناء الفهارس المفردة والمركبة.

04

لماذا يُعد تطبيق بناء قيود المفاتيح الأجنبية القياسية مهماً عند بناء تطبيقات Laravel 12 جاهزة للإنتاج؟

لأنه يمنع الأخطاء البرمجية الخفية ويوحد سلوك التطبيق بين بيئتي التطوير والإنتاج.

05

في Laravel 12، يُنصح بكتابة مفاتيح الإنتاج السرية مباشرة داخل ملفات الكود المصدري المرفوعة إلى Git بدلاً من ملفات البيئة.

خطأ؛ يجب حفظ المفاتيح والبيانات السرية في متغيرات البيئة وعدم رفعها أبداً إلى مستودع Git.

06

ما المزايا الهندسية التي يحققها تطبيق إجراءات الحذف المتسلسل وفك الارتباط في Laravel 12؟ (اختر كل ما ينطبق)

يوفر فصلاً واضحاً للمسؤوليات، وأماناً أعلى أثناء التنفيذ، وتعاوناً أسهل بين أفراد الفريق.

07

يوظف إطار العمل Laravel 12 ميزات PHP 8 الحديثة مثل تحديد أنواع القيم المرجعة لجعل الكود أكثر وضوحاً وأماناً.

صواب؛ يعتمد Laravel 12 بشكل كامل على الصياغة الحديثة للغة PHP 8.2+ وسلامة الأنواع.

08

ما الفرق الجوهري بين معيار Laravel 12 الحديث والملفات اليدوية التقليدية في ملخص تعديل الجداول وقيود المفاتيح؟

يوفر Laravel 12 واجهات قياسية موحدة وحماية مدمجة تغني عن الكود اليدوي المعرض للأخطاء.