我有两个表:类别和产品。
在产品表迁移中,我已经定义了这个:
$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方法。
删除类别后,如何删除产品图片?
答案 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);
}
});
}
}