laravel5.2 удалить модель со всеми связями

Моя текущая модель имеет некоторые отношения. Как их тоже удалить, если модель будет удалена?
Этот запрос не удалит связанные модели, только «основную модель».

Я использую этот код для вызова:

$checks = Check::where('created_at','<=', Carbon::now()
->subHours(3))
->with('checks')
->with('results')
->delete();

Вот моя текущая модель чека

protected static function boot(){
parent::boot();

static::deleting(function($check) {
$check->checks()->delete();
$check->results()->delete();
});
}

Результаты и проверки содержат более одной записи для каждой проверки. Смысл этого, чтобы прояснить ситуацию:

Одна проверка может иметь п CheckResult и может иметь п CheckProcedure (Я, конечно, все их тоже удалю).

1

Решение

Попробуй использовать deleted вместо deleting :

protected static function boot(){
parent::boot();

static::deleted(function($check)
{
$check->checks()->delete();
$check->results()->delete();
});
}

Также попробуйте разобрать объект за объектом из возвращенной коллекции:

foreach($check->checks as $check_object) {
$check_object->delete();
}

Надеюсь это поможет.

1

Другие решения

Как уже указывалось в комментариях, вы выполняете удаление в построителе запросов вместо реальных связанных моделей. то есть

У тебя должно быть

$check->checks->delete();
$check->results->delete();

вместо того, что у вас сейчас есть.

Кроме того, правильный способ сделать это, если вы используете реляционную базу данных, это использовать внешние ключи с каскадным действием удаления.

0