Laravel 5 删除整个类别时删除产品图片

Laravel 5 deleting product image when entire category is deleted

我有两个 table:类别和产品。

在产品 table 迁移中我定义了这个:

$table->foreign('category_id')->references('id')->on('categories')->onDelete('cascade');

所以当一个类别被删除时,该类别的所有产品都会被删除。

类别模型包含:

public function product() {
    return $this->hasMany('App\Product');
}

产品型号包含:

public function category() {
    return $this->belongsTo('App\Category');
}

类别和产品模型包含保存和删除存储在文件系统中的照片的两种方法。

删除类别或照片所附照片的方法:

public static function deleteImage($id) {
    File::deleteDirectory(public_path() . self::$imagesPath . $id);
}

通过覆盖产品或类别模型上的销毁函数调用此方法:

 public static function destroy($id) {
    self::deleteImage($id);
    parent::destroy($id);
}

所以,问题是如果我删除一个类别,我想删除产品图片,除了产品中的记录 table,但产品图片保留在文件系统中。仅从文件系统中删除类别图像。

我在产品模型的 destroy 函数中放置了一个 dd('message'),但似乎在删除类别时不会调用产品模型上的 destroy 方法。

删除类别后如何删除产品图片?

由于MySQL是删除产品的那个,Eloquent无法知道。

您必须在类别模型的 deleting 事件中执行此操作:

class Category extends Eloquent {

    public static function boot()
    {
        static::deleting(function()
        {
            foreach ($this->products as $product)
            {
                $product->deleteImage($product->id);
            }
        });
    }

}