@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 ها استفاده کنین میتونین واسه model user یه دونه observer درست کنین و روی event deletedاش تمام کار هایی که لازمه رو انجام بدین
https://laravel.com/docs/9.x/eloquent#observers
سلام.
در کدهای ایجاد migration به این ترتیب بزنید:
table->foreignId(نام ستون)
و برای پاک کردن هم از دستور foreign میتوانید کمک بگیرید و مقدار onDelete را برابر با cascade بگذارید.