如何在 laravel 8 中使用 Cascade Soft Delete Trait?
How to use Cascade Soft Delete Trait in laravel 8?
$inst = Institution::find($institution->id);
$campus = InstitutionCampusId::where('institution_campus_id.institution_id' , $institution->id);
$inst->删除();
$校园->删除();
在您的模型中添加此特征
use SoftDeletes;
将此添加到您的迁移中,它将在您的 table
字段中添加删除
$table->softDeletes();
将特征添加到您的模型 use SoftDeletes;
并在您的迁移中添加 $table->softDeletes()
在模式创建的末尾(这将自动创建 deleted_at
列)
对于查询,您可以使用 eloquent 方法来只删除或不删除条目,例如:
仅获取已删除的条目:$query->onlyTrashed()
、
仅获取未删除的条目:$query->withoutTrashed()
,
获取所有条目(已删除):$query->withTrashed()
要将条目发送到回收站,请使用:$model->delete()
、
要永久删除条目,请使用:$model->forceDelete()
级联删除是在数据库级别处理的,因此当您在迁移中设置 onDelete('cascade') 时,这将转化为您的数据库删除外键附加的任何记录。
软删除由应用程序处理,因此您需要在父模型上触发一个事件并在子模型上侦听它,或者在您的父模型中绑定 static::deleted()引导方法中的方法,并删除那里的关系。
我不确定你是否可以这样做:
public static function boot()
{
parent::boot();
static::deleted(function ($model) {
// Probably lazy load these relationships to avoid lots of queries?
$model->load([ 'relationshipOne', 'relationshipTwo', ]);
$model->relationshipOne()->delete();
$model->relationshipTwo()->delete();
});
}
或者如果您必须迭代相关项目:
public static function boot()
{
parent::boot();
static::deleted(function ($model) {
$model->relationshipOne->each(function ($item) {
$item->delete();
});
$model->relationshipTwo->each(function ($item) {
$item->delete();
});
});
}
$inst = Institution::find($institution->id); $campus = InstitutionCampusId::where('institution_campus_id.institution_id' , $institution->id); $inst->删除(); $校园->删除();
在您的模型中添加此特征
use SoftDeletes;
将此添加到您的迁移中,它将在您的 table
字段中添加删除$table->softDeletes();
将特征添加到您的模型 use SoftDeletes;
并在您的迁移中添加 $table->softDeletes()
在模式创建的末尾(这将自动创建 deleted_at
列)
对于查询,您可以使用 eloquent 方法来只删除或不删除条目,例如:
仅获取已删除的条目:$query->onlyTrashed()
、
仅获取未删除的条目:$query->withoutTrashed()
,
获取所有条目(已删除):$query->withTrashed()
要将条目发送到回收站,请使用:$model->delete()
、
要永久删除条目,请使用:$model->forceDelete()
级联删除是在数据库级别处理的,因此当您在迁移中设置 onDelete('cascade') 时,这将转化为您的数据库删除外键附加的任何记录。
软删除由应用程序处理,因此您需要在父模型上触发一个事件并在子模型上侦听它,或者在您的父模型中绑定 static::deleted()引导方法中的方法,并删除那里的关系。
我不确定你是否可以这样做:
public static function boot()
{
parent::boot();
static::deleted(function ($model) {
// Probably lazy load these relationships to avoid lots of queries?
$model->load([ 'relationshipOne', 'relationshipTwo', ]);
$model->relationshipOne()->delete();
$model->relationshipTwo()->delete();
});
}
或者如果您必须迭代相关项目:
public static function boot()
{
parent::boot();
static::deleted(function ($model) {
$model->relationshipOne->each(function ($item) {
$item->delete();
});
$model->relationshipTwo->each(function ($item) {
$item->delete();
});
});
}