我有一个父模型和一个子模型,比如分类和帖子。 Post
模型可以附加一个特色图片,删除帖子时需要从存储中删除,因此我的PostController
我的destroy
方法如下所示:
public function destroy($id)
{
$post = Post::findOrFail($id);
if ($post->featured_image_path) {
Storage::delete($post->featured_image_path);
}
$post->delete();
return redirect('/admin/posts');
}
我的CategoryController
有一个类似的destroy
方法,但是当它被销毁时,它还需要删除每个Post
。我知道我可以使用外键并依赖关系来删除帖子,但是在这样做时,特色图像不会从存储中删除。我可以遍历$category->posts()
方法中的每个Category@delete
并检查特色图片,但在多个位置复制此逻辑似乎不正确。
在destroy
删除Post
时,Category
上CategoryController
方法运行逻辑的最佳方法是什么?
答案 0 :(得分:2)
您可以使用这样的方法。
像这样更改您的Category
模型。
class Categories extends Model
{
public static function boot()
{
parent::boot();
static::deleted(function ($object) {
// Logic to delete Post goes here...
});
}
}
像这样的 Post
模型。
class Post extends Model
{
public static function boot()
{
parent::boot();
static::deleted(function ($object) {
// Logic to delete FeatureImage goes here...
});
}
}
因此,当Category
被删除时,它会对应Post
,然后根据您的逻辑删除Image
。
作为增强功能,您可以在events
方法
deleted()