使用其他逻辑删除子模型

时间:2017-01-05 07:34:45

标签: php laravel eloquent

我有一个父模型和一个子模型,比如分类和帖子。 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时,CategoryCategoryController方法运行逻辑的最佳方法是什么?

1 个答案:

答案 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()