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.
我现在的模型有一些关系。我怎样才能删除它们,以防模型被删除? 此查询不会删除相关模型,只会删除 '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.