Не удаляется инофрмация при SoftDelete на странице index
Есть две модели - Сотрудники и Сертификаты сотрудников. Для них две разные страницы index. Когда я делаю SoftDelete сотрудника, затем перехожу на страницу Сертификатов, я все еще продолжаю видеть этого сотрудника в списке сертификатов (имя сотрудника). Исчезает он только тогда, когда делаю полное удаление. А как сделать так, чтобы при softDelete запись на странице все равно пропадала?
EmployeeCertificates index.blade.php:
[
'attribute' => function($item) { return $item->employee->name; },
'label' => 'Сотрудник',
'style' => 'width: 30%; min-width: 200px;',
'filter' => [
'class' => \App\View\Components\Filters\Select::class,
'params' => [
'name' => 'employee_id',
'options' => $employees->pluck('name', 'id')->toArray(),
'value' => request()->get('employee_id', ''),
'htmlAttributes' => '',
],
],
],
Employee model:
public function certificates(): HasMany
{
return $this->hasMany(EmployeeCertificate::class, 'employee_id');
}
EmployeeCertificates model:
public function employee(): BelongsTo
{
return $this->belongsTo(Employee::class, 'employee_id');
}
Ответы (2 шт):
Если вам не нужно хранить сертификаты удаленных сотрудников, то просто добавьте в контроллере в метод удаления сотрудников доп. правило.
EmployeeController.php
...
public function destory(Request $request, Employee $employee)
{
$employee->certificates()->delete();
$employee->delete();
return back();
}
Решение. Добавить в модель Employee функцию boot:
public function certificates(): HasMany
{
return $this->hasMany(EmployeeCertificate::class, 'employee_id');
}
protected static function boot() {
parent::boot();
static::deleting(function($offer) {
$offer->certificates()->delete();
});
}