@websaz
سلام
من چندتا مدل دارم که با hasMany به هم مربوط هستن
User hasMany Bank
User hasMany profile
User hasMany profile->invoice
حالا میخوام مثلا اگر در مدل user یک کاربر را پاک کردم تمام موارد زیر مجموعش هم پاک بشه ولی هر کاری میکنم و هرچی هم توی نت سرچ کردم به خطا میخورم (خطا برای زمانی هست که مثلا مدل profile زیر مجموعه invoice هم داره و میخواد پاک کنه)
این روش برای پاک کردن تک مدل ها جواب میده
protected static function booted()
{
static::deleted(function ($user) {
$user->user_profile()->delete();
$user->user_bank()->delete();
});
}
حالا اگه بخوام زیر مجموعه مدل user_bank که invoice هست هم پاک بشه اینجا به مشکل میخورم
میشه راهنمایی کنین
اینم کدی هست که براش نوشتم
protected static function booted()
{
static::deleted(function ($user) {
$user->user_profile()->delete();
$user->user_bank()->delete();
$user->user_bank->invoice->each->delete();
});
}
البته این کد را همه جوره توی نت بود تست کردم نشد.
توجه : تمام مدل ها با hasMnay به هم متصل هستن
سلام خسته نباشید
ببین یکی از راه هایی که یادمه میتونی بیای توی foreign key هایی که در دیتابیس ست کردی برای کاربر onDelete رو روی cascade بزاری و اگه user حذف بشه خود به خود اونا هم حذف میشن
کار نمیکنه به خاطر این که شما اول دارید user_bank
رو پاک میکنید ، بعد دوباره دارید ازش استفاده میکنید تا به invoice دسترسی پیدا کنید! جای اون دو خط رو عوض کنید.
در ضمن به جای این حرکت بهتر بود توی مایگریشن اون قسمت که از foreign key استفاده کردید onDelete بزارید .
سلام اگر هم نمیخواین از foreign key ها استفاده کنین میتونین واسه model user یه دونه observer درست کنین و روی event deletedاش تمام کار هایی که لازمه رو انجام بدین
https://laravel.com/docs/9.x/eloquent#observers
سلام.
در کدهای ایجاد migration به این ترتیب بزنید:
table->foreignId(نام ستون)
و برای پاک کردن هم از دستور foreign میتوانید کمک بگیرید و مقدار onDelete را برابر با cascade بگذارید.
آیا مایل به ارسال نوتیفیکیشن و اخبار از طرف راکت هستید ؟