مهدی
4 سال پیش توسط مهدی مطرح شد
7 پاسخ

روابط در لاراول

سلام چطور میشه وقتی یه رکورد رو از دیتابیس حذف میکینیم چیزهایی که با اون در رابطه هستند هم حذف بشند؟مثلا وقتی یه پست حذف میکنیم نظرات مربوط به اون پست هم حذف بشه.


ثبت پرسش جدید
محمدحسن یگانه
تخصص : Full-Stack Web Developer Freel...
@mhyeganeh 4 سال پیش مطرح شد
1

برای onDelete چندتا مقدار میشه قرار داد:

cascade: همون طوری که دوستان اشاره کردند به این معنی هست که اگر پدرشون حذف بشه تمام بچه هاش هم حذف میشه. مثلا با حذف یک نویسنده تمام پست های وبلاگ و کامنت ها و ... مربوط به ایشون هم حذف میشه.

set null: بعد از حذف پدرشون در فیلد مربوط به FK مقدار NULL قرار میگیره. یعنی مثلا فیلد author_id در جدول posts برابر null میشه.

restrict: اگر هم این مقدار رو قرار بدید اجازه حذف پدر رو در صورتی که فرزند داشته باشه نمیده. یعنی مادامی که یک نویسنده دارای پست یا کامنت هست نمی‌تونید رکورد نویسنده رو حذف کنید و ارور میده.


محسن بستان
تخصص : Senior Backend Developer
@mohsenbostan 4 سال پیش مطرح شد
0

@mahdiam200
سلام.
در migration باید یک کلید خارجی تعریف کنید و برای اون onDelete رو بذارید روی cascade.


مهدی
تخصص : برنامه نویس
@mahdiam200 4 سال پیش مطرح شد
0

میشه بیشتر توضیح بدید؟


محمد مهدی
@MohammadMahdi 4 سال پیش مطرح شد
0

@mahdiam200
سلام،
به طور مثال به این شکل:

$table->unsignedBigInteger('user_id');
$table->foreign('user_id')->references('id')->on('users')->onDelete('cascade');

که onDelete('cascade') کاری که شما مد نظر دارید رو انجام میده.


Armin Rahmati
@arminrahmati999 4 سال پیش آپدیت شد
0

سلام به شما دوست عزیز.
ببینید شما به عنوان مثال یه مایگریشن واسه کاربر دارین و کاربر میخواد بیاد یه سری مقاله ثبت کنه و میخواین وقتی مقاله حذف شد همه چیز مربوط به مقاله هم حذف بشه.
باید به صورت زیر در جدول مقاله یه کاید خارجی تعریف کنید.

$table->unsignedBigInteger('user_id');
$table->foreign('user_id')->references('id')->on('users')->onDelete('cascade');

محمدحسن یگانه
تخصص : Full-Stack Web Developer Freel...
@mhyeganeh 4 سال پیش مطرح شد
1

برای onDelete چندتا مقدار میشه قرار داد:

cascade: همون طوری که دوستان اشاره کردند به این معنی هست که اگر پدرشون حذف بشه تمام بچه هاش هم حذف میشه. مثلا با حذف یک نویسنده تمام پست های وبلاگ و کامنت ها و ... مربوط به ایشون هم حذف میشه.

set null: بعد از حذف پدرشون در فیلد مربوط به FK مقدار NULL قرار میگیره. یعنی مثلا فیلد author_id در جدول posts برابر null میشه.

restrict: اگر هم این مقدار رو قرار بدید اجازه حذف پدر رو در صورتی که فرزند داشته باشه نمیده. یعنی مادامی که یک نویسنده دارای پست یا کامنت هست نمی‌تونید رکورد نویسنده رو حذف کنید و ارور میده.


مهدی
تخصص : برنامه نویس
@mahdiam200 4 سال پیش مطرح شد
0

در مورد روابط ساده مشکل حل شد اما اگه رابطه پلی مورفیک باشه؟اونموقع دیگه نمیتونیم فیلد able_id رو انتخاب کنیم چون به عنوان مثال امکان داره عکس مربوط به مقاله ۶ و محصول ۶ وجود داشته باشه و با این کار اگر هر کدومش حذف شد عکس اون یکی هم حذف میشه راهکارتون چیه؟


رافق مجتهدزاده
تخصص : برنامه نویسی php
@rafig 2 سال پیش مطرح شد
-1

لطفا در مورد حذف در روابط مورفیک هم راهنمایی کنید.
در روابط مورفیک یک به یک چطوری باید حذف کنیم . با توجه به اینکه فیلد able دار رو اتوماتیک تعریف می کنیم. کلید خارجی هم که نیست براش ondelete تعریف کنیم


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

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