سلام دوستان..
یه جدول واسط دارم به اسم
category_product
به این صورت مایگریت شده..
$table->id();
$table->bigInteger('cat_id')->unsigned();
$table->foreign('cat_id')->references('id')->on('categories')->onDelete('cascade');
$table->bigInteger('product_id')->unsigned();
$table->foreign('product_id')->references('id')->on('products')->onDelete('cascade');
الان وقتی برنامه رو اجرا میکنم و میخواد محصولی بسازه که تو چند دسته بندی هست ارور زیر رو میده:
Integrity constraint violation: 1452 Cannot add or update a child row: a foreign key constraint fails (`myDataBase`.`category_product`, CONSTRAINT `category_product_cat_id_foreign` FOREIGN KEY (`cat_id`) REFERENCES `categories` (`id`) ON DELETE CASCADE) (SQL: insert into `category_product` (`cat_id`, `product_id`) values (6, 1), (6, 2))
کلا میخوام وقتی که دسته بندی توسط ادمین حذف بشه محصولات داخلش هم از جدول واسط حذف بشه و برعکس اگر محصولی توسط ادمین حذف بشه بازم از جدول واسط حذف بشه..
درود.
مشکل شما اینجاست که دارید سطری رو در جدول فرزند(جدول واسط) ایجاد میکنید و مقدار بهش میدید اما نظیر اون مقدار یا id در جداول اصلی وجود نداره. تعریف فیلدهای جدولتون هم هیچ مشکلی نداره. احتمالا مایگرشن واسط رو زودتر از مایگرشن جداول اصلی دارید ایجاد میکنید یا مقادیر پیشفرض برای جداول واسط قرار دادید یا به صورت دستی مقادیری در پایگاه داده قبل از ماگریت کردن دستی قرار دادید.
سلام به جای
bigInteger
از
unsignedInteger
استفاده کنید
مثل اینکه از لاراول 7 استفاده میکنید
به این شیوه تست کنید ببینید اوکی میشه
$table->foreignId('user_id');
Alias of $table->unsignedBigInteger('user_id').
درود.
مشکل شما اینجاست که دارید سطری رو در جدول فرزند(جدول واسط) ایجاد میکنید و مقدار بهش میدید اما نظیر اون مقدار یا id در جداول اصلی وجود نداره. تعریف فیلدهای جدولتون هم هیچ مشکلی نداره. احتمالا مایگرشن واسط رو زودتر از مایگرشن جداول اصلی دارید ایجاد میکنید یا مقادیر پیشفرض برای جداول واسط قرار دادید یا به صورت دستی مقادیری در پایگاه داده قبل از ماگریت کردن دستی قرار دادید.
سلام - شما یک primary key با نام id برای جدولت گذاشتی ؟ چرا اینکارو کردی ؟
معمولا جداول واسط دو تا کلید خارجی با همدیگه میشن primery key
$table->primary(['first', 'last']);
این خطت رو هم حذف کن
$table->id();
نه نظیرش توی جدول اصلی وجود داره.. اطلاعات از قبل ثبت شده با این آی دی ها...
توی مایگریشن ها هم اولویت ها رعایت شده.. اگر رعایت نشه همون موقع مایگریت ارور میده...
درست شد، مشکل کار اینجا بود که توی مادل وقتی ارتباط چند به چند رو تعریف کردم، دوتا ستون رو توی جدول واسط جابه جا نوشته بودم..
برعکس کردم درست شد..
یعنی همون چیزی که شما گفته بودید اتفاق افتاده بود..
ممنون
آیا مایل به ارسال نوتیفیکیشن و اخبار از طرف راکت هستید ؟