Php plank/laravel可调解-删除可调解实体时,删除与分离介质
当删除具有Mediabletrait的模型时,借助事件侦听器,将自动从Mediables表中清除对关联媒体的所有引用。好的但这不会删除相关的媒体条目,也不会删除磁盘上与这些媒体一起使用的文件。我可以理解这部分是出于设计:这些媒体条目也可能与其他实体相关联 但在此上下文中,一个媒体项一次只能附加到一个项,如果该项消失,则该媒体项及其关联的文件应随之消失 目前,我通过在模型上注册一个deleting()监听器来解决这个问题,并通过任何连接的媒体循环,分离它,然后逐个删除它 这是推荐的方法,还是我遗漏了laravel media中的一些实现细节,这些细节将在给定媒体的引用数用尽时自动处理此内部清理Php plank/laravel可调解-删除可调解实体时,删除与分离介质,php,laravel,Php,Laravel,当删除具有Mediabletrait的模型时,借助事件侦听器,将自动从Mediables表中清除对关联媒体的所有引用。好的但这不会删除相关的媒体条目,也不会删除磁盘上与这些媒体一起使用的文件。我可以理解这部分是出于设计:这些媒体条目也可能与其他实体相关联 但在此上下文中,一个媒体项一次只能附加到一个项,如果该项消失,则该媒体项及其关联的文件应随之消失 目前,我通过在模型上注册一个deleting()监听器来解决这个问题,并通过任何连接的媒体循环,分离它,然后逐个删除它 这是推荐的方法,还是我遗漏
public static function boot()
{
parent::boot();
static::deleting(function (self $model) {
$mediabytag = $model->getAllMediaByTag();
if ($mediabytag) {
foreach ($mediabytag as $tag => $medias) {
foreach ($medias as $m) {
$model->detachMedia($m);
$m->delete();
}
}
}
});
}
更新:据我所知,Mediable将关系设置为多态多对多:
/**
* Relationship for all attached media.
* @return MorphToMany
*/
public function media(): MorphToMany
{
return $this
->morphToMany(
config('mediable.model'),
'mediable',
config('mediable.mediables_table', 'mediables')
)
->withPivot('tag', 'order')
->orderBy('order');
}
这是一对多关系吗?@MikeRoss,不,如果我理解正确的话,可调节的特质将其设置为多态性多对多关系。(见上面更新的帖子。)这是一对多关系吗?@MikeRoss,不,如果我理解正确的话,可调节特质将其设置为多态性多对多关系。(见上面更新的帖子。)