اذهب إلى المحتوى
  • 0

استفسار حول One To Many (polymorphic)

بندر البطاطي

السؤال

في الصورة المرفقة فهمت ان commentable_id يخزن  foreign key لجدول Posts او Videos  .. ولكن هل يتم تعيين العمود commentable_id كـ foreign key او فقط يخزن foreign key دون ان يكون هو عبارة عن foreign key ؟

Screenshot (882).png

رابط هذا التعليق
شارك على الشبكات الإجتماعية

Recommended Posts

  • 0

علاقة One Two Many Polymorphic تقتضي أن يكون العمود الممثل للمفتاح الاجنبي حاملا لقيمته لا أكثر، ولا يتطلبك تصريحه كمفتاح أجنبي يشير الى مفتاح اولي في جدول آخر. بمعنى أنه سيكون مجرد Ineteger لا أكثر ولا يفترض أن يحمل أن علاقة تعبر عنه كونه مفتاحا أجنبيا، بل سيتم الاستعلام عنه لاحقا باعتبار هاته القيمة وفقط. هيكلة الجداول لديك يجب أن تبدوا على النحو التالي: 

Schema::create('comments', function (Blueprint $table) {
    $table->id();
    $table->text("comments");
    $table->integer('commentable_id');
    $table->string("commentable_type");
    $table->timestamps();
});

ولا تنسى بطبيعة الحال تصريح التوابع اللازمة في ملفات النماذج المعنية Comment و Video و Post وسيتم الأمر بشكل تلقائي. 

رابط هذا التعليق
شارك على الشبكات الإجتماعية

  • 0
بتاريخ 13 دقائق مضت قال Adnane Kadri:

علاقة One Two Many Polymorphic تقتضي أن يكون العمود الممثل للمفتاح الاجنبي حاملا لقيمته لا أكثر، ولا يتطلبك تصريحه كمفتاح أجنبي يشير الى مفتاح اولي في جدول آخر. بمعنى أنه سيكون مجرد Ineteger لا أكثر ولا يفترض أن يحمل أن علاقة تعبر عنه كونه مفتاحا أجنبيا، بل سيتم الاستعلام عنه لاحقا باعتبار هاته القيمة وفقط. هيكلة الجداول لديك يجب أن تبدوا على النحو التالي: 

Schema::create('comments', function (Blueprint $table) {
    $table->id();
    $table->text("comments");
    $table->integer('commentable_id');
    $table->string("commentable_type");
    $table->timestamps();
});

ولا تنسى بطبيعة الحال تصريح التوابع اللازمة في ملفات النماذج المعنية Comment و Video و Post وسيتم الأمر بشكل تلقائي. 

ولكن في حال تم حذف post او video لن يتم حذف التعليق المتعلق بهم في هذه الحالة .. صحيح ؟

رابط هذا التعليق
شارك على الشبكات الإجتماعية

  • 0
بتاريخ الآن قال بندر البطاطي:

ولكن في حال تم حذف post او video لن يتم حذف التعليق المتعلق بهم في هذه الحالة .. صحيح ؟

بشكل افتراضي لن يتم ذلك على مستوى قاعدة البيانات، ولكن يمكنك تجاوز التابع delete الخاص بـ post أو video فتقوم بحذف جميع التعليقات الفرعية قبل حذف المنشور أو الفيديو. 

public function delete()
{
   if(parent::delete())){
       $this->comments()->delete();
   }   
}
رابط هذا التعليق
شارك على الشبكات الإجتماعية

انضم إلى النقاش

يمكنك أن تنشر الآن وتسجل لاحقًا. إذا كان لديك حساب، فسجل الدخول الآن لتنشر باسم حسابك.

زائر
أجب على هذا السؤال...

×   لقد أضفت محتوى بخط أو تنسيق مختلف.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   جرى استعادة المحتوى السابق..   امسح المحرر

×   You cannot paste images directly. Upload or insert images from URL.

  • إعلانات

  • تابعنا على



×
×
  • أضف...