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

时间:2015-03-23 14:20:09

标签: php laravel relationship

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

在产品表迁移中,我已经定义了这个:

$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);
}

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

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

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

1 个答案:

答案 0 :(得分:1)

由于MySQL是删除产品的人,因此Eloquent无法了解它。

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

class Category extends Eloquent {

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

}