/** * observe product event deleting * 1. delete varian * 2. delete price * 3. delete category(and tag) * 4. delete label * 5. delete image * 6. act, accept or refuse * * @param $model * @return bool */ public function deleting($model) { $errors = new MessageBag(); //1. delete product's varian $varians = Varian::where('product_id', $model->id)->get(); foreach ($varians as $varian) { if (!$varian->delete()) { $errors->add('varian', $varian->getError()); } } //2. delete product's price $prices = Price::where('product_id', $model->id)->get(); foreach ($prices as $price) { if (!$price->delete()) { $errors->add('price', $price->getError()); } } //3. delete product's categories $categories = CategoryProduct::where('product_id', $model->id)->get(); foreach ($categories as $category) { if (!$category->delete()) { $errors->add('category', $category->getError()); } } //4. delete product's label $labels = ProductLabel::where('product_id', $model->id)->get(); foreach ($labels as $label) { if (!$label->delete()) { $errors->add('label', $label->getError()); } } //5. delete product's image $images = Image::where('imageable_type', 'App\\Models\\Product')->where('imageable_id', $model->id)->get(); foreach ($images as $image) { if (!$image->delete()) { $errors->add('image', $image->getError()); } } if ($errors->count()) { $model['errors'] = $errors; return false; } return true; }