Моя текущая модель имеет некоторые отношения. Как их тоже удалить, если модель будет удалена?
Этот запрос не удалит связанные модели, только «основную модель».
Я использую этот код для вызова:
$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
(Я, конечно, все их тоже удалю).
Попробуй использовать 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();
}
Надеюсь это поможет.
Как уже указывалось в комментариях, вы выполняете удаление в построителе запросов вместо реальных связанных моделей. то есть
У тебя должно быть
$check->checks->delete();
$check->results->delete();
вместо того, что у вас сейчас есть.
Кроме того, правильный способ сделать это, если вы используете реляционную базу данных, это использовать внешние ключи с каскадным действием удаления.