لارافيل الجدول المحوري مع مفتاح خارجي لاغيابل

StackOverflow https://stackoverflow.com//questions/25008595

  •  20-12-2019
  •  | 
  •  

سؤال

لدي جدول محوري تم إعداده على النحو التالي:

user_roles
  user_id //fk->users.id
  assoc_id //nullable fk->association.id
  role //varchar

لقد قمت بإعداد قاعدة البيانات الخاصة بي بهذه الطريقة لأن الأدوار تمثل علاقة كثيرة إلى كثيرة:لدى الجمعية العديد من المستخدمين ، وقد يكون المستخدم في العديد من الجمعيات.كل مستخدم له دور داخل جمعية.

ومع ذلك ، هناك بعض الأدوار الموجودة التي يمكن أن توجد خارج الجمعية.تم تكوين قاعدة البيانات لقبول قيمة فارغة في assoc_id الحقل ويمكنني إدراج واحد يدويا من سطر الأوامر ، ولكن عندما أحاول تنفيذ

$user->roles()->attach(NULL, "outside contractor");

في ملف البذور الخاص بي ، أحصل على خطأ يقول

[Illuminate\Database\QueryException]                                         
SQLSTATE[23000]: Integrity constraint violation: 1452 Cannot add or update   
a child row: a foreign key constraint fails (`database`.`user_roles`, CONSTR  
AINT `user_roles_user_id_foreign` FOREIGN KEY (`user_id`) REFERENCES `users  
` (`id`)) (SQL: insert into `user_roles` () values ()) 

هذا مربك بشكل خاص لأنه لا ينبغي أن تشير الحجة الأولى هنا إلى assoc_id?عندما أستبدل NULL مع صالح assoc_id,

$user->roles()->attach(1, "outside contractor");

إدراج يعمل بشكل جيد ، وتشير الوسيطة الأولى إلى assoc_id في الجدول.

ما هو الخطأ?

هل كانت مفيدة؟

المحلول

إذا لم تقدم مفتاحا / مفاتيح لـ attach/sync, ، بليغ لن إدراج أي شيء.إنه سلوك متوقع إلى حد ما ، لأن ما تحاول القيام به هو:

إنشاء ارتباط بين س و نول

هذا ليس ما يفترض أورم القيام به.

بدلا من ذلك إدراج تلك الصفوف يدويا:

$data = [
   'user_id' => 99, 
   'assoc_id' => null, 
   'role' => 'outside contractor'
];

DB::table('user_roles')->insert($data);
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top