laravel5.2删除所有关系的模型

时间:2016-07-09 19:16:18

标签: php model laravel-5.2 relationship cascading-deletes

我目前的模特有一些关系。我怎样才能删除它们,如果模型被删除? 此查询不会删除相关模型,只会删除“主模型”。

我使用此代码调用:

sp_procoption

这是我当前的Check模型

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

结果和检查包含每项检查的多个条目。这意味着要明确:

一张支票可能有n protected static function boot(){ parent::boot(); static::deleting(function($check) { $check->checks()->delete(); $check->results()->delete(); }); } ,可能有n CheckResult(我当然也会删除所有支票)。

2 个答案:

答案 0 :(得分: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 :(得分:0)

正如评论中已经指出的那样,您正在查询构建器上执行删除而不是实际的相关模型。即。

你应该

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

而不是你现在拥有的。

此外,假设您使用关系数据库,正确的方法是使用foreign keys with cascade delete action