سلام دوستان
من داخل migration کد مربوط به پاک شدن رکورد های مربوط به کلید خارجی رو گذاشتم .. ولی بعد از پاک شدن رکورد اصلی .. رکورد جدول مرتبط پاک نمیشد .
$table->integer('question_id')->unsigned();
$table->foreign('question_id')->references('id')->on('questions')->onDelete('cascade');
تو اینترنت سرچ کردم و به این نکته رسیدم که باید database engine رو برابر InnoDB قرار بدم
$table->engine = 'InnoDB';
ولی بعد اینکه این کار رو انجام دادم دیگه migration مربوط به کلید خارجی کلا اجرا نمیشه و ارور میده .
[Illuminate\Database\QueryException]
SQLSTATE[HY000]: General error: 1215 Cannot add foreign key constraint (SQL: alter table `answers` add constraint `answer
s_question_id_foreign` foreign key (`question_id`) references `questions` (`id`) on delete cascade)
[PDOException]
SQLSTATE[HY000]: General error: 1215 Cannot add foreign key constraint
راه حلی بعدی اینه که کد های مربوط به حذف اتوماتیک رکورد ها رو تو مدل مربوطه قرار بدم
protected static function boot() {
parent::boot();
static::deleting(function($question) {
$question->answers()->delete();
});
}
این روش جواب داد .. ولی من همچنان میخوام که این کار توسط خود MySql انجام بشه و داخل migration تعریفش کنم ..
به نظر شما راه حل چیه ؟
بنظرم یکبار بصورت زیر عمل کنید و ببینید نتیجه چطور میشه
Schema::create('answers', function($table) {
...
$table->integer('question_id')->unsigned();
...
});
Schema::table('answers', function($table) {
$table->foreign('question_id')->references('id')->on('questions')->onDelete('cascade');
});
منم دقیقا این مشکل رو دارم.اگه راه حل رو پیدا کردید به اشتراک بزارید لطفا، چون واقعا اعصابمو ریخته بهم
من جواب گرفتم.
$table->engine = 'InnoDB';
این دستور رو در خط اول migration هر دوتا جدولی که با هم رابطه دارن استفاده کن
یا تو فایل database.php تو پوشه config برای کل پروژت مشخص کن
دقت کن اگه تو فایل database.php خواستی این کارو بکنی حواست باشه تو اون آرایه تنظیمات mysql خودش به صورت پیش فرض برابر false نزاشته باشه گزینه engine رو.
یک نکته دیگه هم داشت که بعد از چند روز سردرد بالاخره کشف شد.
شما نباید مایگریشن جدول میانی دو جدول رو داخل مایگریشن یکی از دو جدول مرتبط بنویسی و باید برای جدول های میانی هم مایگریشن جدا درست کنی.
امیدوارم رسونده باشم مطلبو
آیا مایل به ارسال نوتیفیکیشن و اخبار از طرف راکت هستید ؟