محمدرضا فلکی
7 ماه پیش توسط محمدرضا فلکی مطرح شد
3 پاسخ

آیا موقع rollback کردن migration های لاراول کلید های خارجی هم پاک میشن

سلام
آیا موقع rollback کردن migration های لاراول کلید های خارجی هم پاک میشن؟
پس کار cascadeOnDelete چیه؟ فقط برای value های مرتبط هست؟
برای اینکه بخوام کلید های خارجی هم پاک بشن باید مثل کد زیر رفتار کنم؟
 تصویر


ثبت پرسش جدید
محمد رضا
تخصص : Full Stack Developer
@salar.mohammad2013 7 ماه پیش آپدیت شد
1

سلام مجدد
ببین توی جدولت یک سری ستون داری که بعضی از اون ها کلید خارجی جداول دیگر هستند درست؟ وقتی جدول رو پاک کنی هرچی توی جدول هست پاک میشه دیگ (همین جدولی که پاک کردی مثلا blog_comment خودش کامل پاک میشه و کاری به بقیه جداول نداره با فرض این که جدول دیگری کلید بلاگ کامنت رو نداشته باشه که بعیده داشته باشه)
توی on delete cascade تو داری میگی من رو پاک کن اگر پدرم پاک شد
مثال جدولی که فرستادی خودت
اگر جدول users یا جدول blogs رو پاک کنی بهت خطا میده mysql میگه یه جدولی داری blog_comments که یه جورایی فرزند اینه و کلید خارجی ای ازین جدول (User و یا blogs )داره و استفاده میکنه اول برو اونو حذف کن بعد بیا
یعنی با نبود جدول یوزر جدول بلاگ کامنتی هم وجود نداره دیگ


محمد رضا
تخصص : Full Stack Developer
@salar.mohammad2013 7 ماه پیش مطرح شد
0

سلام دوست عزیز
رولبک لاراول اخرین مرحله ای که migrate کردی رو انگار اصلا انجامش ندادی
اگر استاتوس بگیری از مایگریت هات

php artisan migrate:status

میبینی یه عددی تهش هست که به عنوان batch نوشته شده
اخرین عدد و مرحله ای که میبینی با rollback بر میگرده یه جورایی مثل بک زدن توی بقیه نرم افزار ها و اصطلاحا undo کردن هست
که عدد batch ممکنه حتی همه ی جداولت رو هم شامل بشه (در صورتی که به یکبار مایگریت شده باشند)

حالا onDelete('cascade') چیه؟
ببین بهش میگن حذف ابشاری برات یه مثال میزنم
شما فرض کن جدولی داری کاربر و جدول دیگری برای ادرس هاش و جدول دیگری برای شماره تماس های کاربر ها
حالا اگر یک کاربر حذف بشه آیا ادرس و شماره تلفنش بدرت میخوره وقتی خود اون کاربر وجود نداره؟
با انتخاب گزینه حذف ابشاری تو شماره تماس و ادرس اون کاربر رو هم به صورت اتومات حذف میکنی و نیاز به هیچ دستور دیگه ای براش نیست و دیتابیست داده ی اضاف و الکی دیگ نگه نمیداده همین
ولی باید حواستم باشه کجا ها استفاده میکنی و لینک میکنی که داده ی دیگه ای اشتباها حذف نشه
مثلا اگر کاربر تو پرداختی ای داشته و تو کاربر رو حذف کنی دیگ سند مالی ای نداری براش و اون شخص به مشکل میخوره
برای همین وقتی میخوایی عمل حذف رو توی این موضوعات مهم انجام بدی خطا میدی که فلانی فاکتوری داره پرداختی داره فلان داده ی مهم رو داره و امکان حذف نیست تا طرف اول بره اون فاکتور رو ببینه و اگر مهم نبود فاکتور یا سند پرداخت رو حذف کنه بعد کاربر رو حذف کنه که بعضا اصلا نباید اجازه حذف بدی


محمدرضا فلکی
تخصص : Learning Laravel
@m.reza6920 7 ماه پیش مطرح شد
0

اهان
خیلی ممنون @salar.mohammad2013
ولی قسمت اولش در رابطه با پاک کردن کلید های خارجی رو متوجه نشدم


محمد رضا
تخصص : Full Stack Developer
@salar.mohammad2013 7 ماه پیش آپدیت شد
1

سلام مجدد
ببین توی جدولت یک سری ستون داری که بعضی از اون ها کلید خارجی جداول دیگر هستند درست؟ وقتی جدول رو پاک کنی هرچی توی جدول هست پاک میشه دیگ (همین جدولی که پاک کردی مثلا blog_comment خودش کامل پاک میشه و کاری به بقیه جداول نداره با فرض این که جدول دیگری کلید بلاگ کامنت رو نداشته باشه که بعیده داشته باشه)
توی on delete cascade تو داری میگی من رو پاک کن اگر پدرم پاک شد
مثال جدولی که فرستادی خودت
اگر جدول users یا جدول blogs رو پاک کنی بهت خطا میده mysql میگه یه جدولی داری blog_comments که یه جورایی فرزند اینه و کلید خارجی ای ازین جدول (User و یا blogs )داره و استفاده میکنه اول برو اونو حذف کن بعد بیا
یعنی با نبود جدول یوزر جدول بلاگ کامنتی هم وجود نداره دیگ


برای ارسال پاسخ لازم است وارد شده یا ثبت‌نام کنید

ورود یا ثبت‌نام