У меня есть две таблицы: категории и продукты.Laravel 5 удаление изображения продукта при удалении всей категории
В миграции продуктов таблицы я определил это:
$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);
}
Таким образом, проблема в том, если я удалите категорию, я хочу также удалить изображения продуктов, кроме записей в таблице продуктов, но изображения продуктов остаются в файловой системе. Из файловой системы удаляются только изображения категорий.
Я поместил dd ('message') в функцию destroy в модели продукта, но кажется, что метод destroy на модели продукта не вызывается, когда категория удаляется.
Как удалить изображения продукта, когда категория удалена?
продуктов удаление будет сделаны с тузда стороны (в случае InnoDB), не Laravel, так что вам нужно, чтобы запустить событие, перед удалите категории, чтобы перебрать все продукты, относящиеся к категориям, и удалить их. –