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

laravel5.2 delete model with all relations

我现在的模型有一些关系。我怎样才能删除它们,以防模型被删除? 此查询不会删除相关模型,只会删除 'main model'.

我用这段代码调用:

$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(我当然也会全部删除)。

尝试使用 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();

而不是你目前拥有的。

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