2016-07-09 3 views
1

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

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

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

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

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

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

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

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

+0

вы вызываете 'delete' в построителе запросов, а не в модели. Если вы хотите запустить модельное событие, вы должны вызвать это на модели. также не уверен, для чего нужна загруженная загрузка, если вы просто выполняете инструкцию delete на db. – lagbox

ответ

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(); 
} 

Надеется, что это помогает.

+0

Я обновил код выше, не работает. Удаляется только основная модель. –

+0

убедитесь, что метод будет запущен путем добавления 'dd()' или 'log' внутрь. –

0

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

Вы должны

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

вместо того, что вы в настоящее время.

Кроме того, правильный способ сделать это при условии, что вы используете реляционную базу данных, это использовать foreign keys with cascade delete action.

+0

Код выше отредактирован снова. Не работает. –

+0

Вы не смотрите. 'checks-> delete()' not 'checks() -> delete()' –

Смежные вопросы