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

كيف يمكن التعامل مع علاقة Many to Many في لارافيل؟

احمد مصطفى14

السؤال

السلام عليكم
عندي سؤال
انا عملت علاقه بين جدولين واريد ان اصنع الحدث الذي يربطهم في جدول اخر باستخدام laravel
كما هو موضع انشات العلاقه في الmigration   وتعمل بالشكل المطلوب في Database
كل ما احاول معرفته هو كيف يمككنى انشاء العلاقه او حدفها باستخدام الكود

1.png

Screenshot 2022-06-17 004141.png

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

Recommended Posts

  • 0

اظنك تحاول انشاء علاقة Many to Many بين جدولي doctors و projects. لفعل هذا نقوم في لارافيل بانشاء جدول وسيط مثل الذي تقوم به في phpmyadmin ثم عن طريق تعريف توابع العلاقات في ملفات النماذج المرافقة للجدولين بجلب مشاريع دكتور معين أو دكاترة مشروع معين.

لنقم اولا عن طريق الامر: 

php artisan make:migration doctor_project

لانشاء الجدول الوسيط.

الآن سنحتاج تعريف طرفي العلاقة Many to Many في ملفات كل نموذج: 

في ملف Project.php :

class Project extends Model
{
    /**
     * ..
     */
    public function doctors()
    {
        return $this->belongsToMany(Doctor::class);
    }
}

في ملف Doctor.php:

class Doctor extends Model
{
    /**
     * ..
     */
    public function projects()
    {
        return $this->belongsToMany(Project::class);
    }
}

الآن تأكد من تهجير قواعد البيانات عن طريق:

php artisan migrate

ثم سيمكنك استدعاء ناتج اي من العلاقتين عن طريق القراءة من التابع projects او doctors:

$doctor = Doctor::first();

dd($doctor->projects);
$project = Project::first();

dd($project->doctors);

يمكنك الاستفادة من هاته الاجابات ايضا عن ذات العلاقة.

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

  • 0

لقد فعلت كل هذا شكرا لك واعتذر على عدم توضيح ما احاول ان اوصله
المشكله عندي اننى اريد ان انشئ العلاقه في الجدول
بمعنى انني اقوم بعمل insert لل project_id و doctor_id
واربطهم ببعضم من خلال ملف الblade وليس من قاعدة البيانات كما في الصورة
لقد بحثت كثيرا لكن لم اعرف كيفيه القيام بذلك

1.png

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

  • 0
بتاريخ 2 دقائق مضت قال أحمد مصطفى كامل:

لقد فعلت كل هذا شكرا لك واعتذر على عدم توضيح ما احاول ان اوصله
المشكله عندي اننى اريد ان انشئ العلاقه في الجدول
بمعنى انني اقوم بعمل insert لل project_id و doctor_id
واربطهم ببعضم من خلال ملف الblade وليس من قاعدة البيانات كما في الصورة
لقد بحثت كثيرا لكن لم اعرف كيفيه القيام بذلك

1.png

لإنشاء مدخل جديد في الجدول الوسيط في علاقات Many to Many في لارافيل، يمكن استعمال التوابع attach و detach كالتالي:

$project = Project::first();

$doctor = Doctor::first();


$project->doctors()->attach($doctor->id); // لإضافة دكتور جديد لمجموعة الدكاترة الخاصة بمشروع ما
$project->doctors()->detach($doctor->id); // لإزالة دكتور ما من مجموعة الدكاترة الخاصة بمشروع ما

وبالطبع فان نفس الأمر يمكن فعله مع الجدول الآخر:

$doctor = Doctor::first();

$project = Project::first();



$doctor->projects()->attach($project->id); // لإضافة مشروع جديد لمجموعة المشاريع الخاصة بدكتور ما
$doctor->projects()->detach($project->id); // لإزالة مشروع من مجموعة المشاريع الخاصة بدكتور ما

يمكنك ايضا اسناد او ازالة مجموعة من العناصر الى التابعين، ففي حال ما كنت تحاول مثلا اضافة مجموعة من المشاريع لدكتور معين دفعة واحدة يمكنك ذلك عن طريق:

$doctor = Doctor::first();

$projects = Project::inRandomOrder()->limit(10)->pluck('id'); // مجموعة عشوائية من المشاريع



$doctor->projects()->attach($projects); // لإضافة مجموعة مشاريع جديدة لمجموعة المشاريع الخاصة بدكتور ما

انتبه الى انه في حالة عدم تمرير اي معاملات الى التابع detach سيتم محو كامل الاسطر الوسيطة في الجدول الوسيط الخاصة بالعنصر المشار اليه:

$doctor = Doctor::first();

$doctor->projects()->detach(); // محو كامل العلاقات

او:

$project = Project::first();

$project->doctors()->detach(); // محو كامل العلاقات

 

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

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

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

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

×   لقد أضفت محتوى بخط أو تنسيق مختلف.   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.

  • إعلانات

  • تابعنا على



×
×
  • أضف...