From d0aeeb522bcb4d5319709b3740c85c4fa8b27374 Mon Sep 17 00:00:00 2001 From: TL Date: Fri, 13 Jan 2023 10:36:53 +0800 Subject: [PATCH] =?UTF-8?q?=E5=88=A0=E9=99=A4=E5=B1=9E=E6=80=A7=E6=97=B6?= =?UTF-8?q?=E6=A3=80=E6=9F=A5=E6=98=AF=E5=90=A6=E6=9C=89=E5=95=86=E5=93=81?= =?UTF-8?q?=E4=BD=BF=E7=94=A8=20=E5=88=A0=E9=99=A4=E5=95=86=E5=93=81?= =?UTF-8?q?=E6=97=B6=E5=88=A0=E9=99=A4=E5=95=86=E5=93=81=E5=88=86=E3=80=81?= =?UTF-8?q?=E5=95=86=E5=93=81=E7=9B=B8=E5=85=B3=E3=80=81=E5=95=86=E5=93=81?= =?UTF-8?q?sku=E3=80=81=E5=95=86=E5=93=81=E5=B1=9E=E6=80=A7=E3=80=81?= =?UTF-8?q?=E5=95=86=E5=93=81=E6=8F=8F=E8=BF=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- beike/Admin/Repositories/AttributeRepo.php | 5 +++++ beike/Repositories/ProductRepo.php | 17 ++++++++++++++++- resources/lang/en/admin/attribute.php | 1 + resources/lang/en/admin/attribute_groups.php | 2 +- resources/lang/zh_cn/admin/attribute.php | 1 + 5 files changed, 24 insertions(+), 2 deletions(-) diff --git a/beike/Admin/Repositories/AttributeRepo.php b/beike/Admin/Repositories/AttributeRepo.php index 1c361aa9..0089eddb 100644 --- a/beike/Admin/Repositories/AttributeRepo.php +++ b/beike/Admin/Repositories/AttributeRepo.php @@ -13,6 +13,7 @@ namespace Beike\Admin\Repositories; use Beike\Models\Attribute; use Beike\Models\AttributeValue; +use Beike\Models\ProductAttribute; class AttributeRepo { @@ -107,6 +108,10 @@ class AttributeRepo public static function delete($id) { + $productIds = ProductAttribute::query()->where('attribute_id', $id)->pluck('product_id')->toArray(); + if ($productIds) { + throw New \Exception(trans('admin/attribute.error_cannot_delete_product_used', ['product_ids' => implode(', ', $productIds)])); + } $attribute = Attribute::query()->findOrFail($id); $attribute->descriptions()->delete(); $attribute->values()->delete(); diff --git a/beike/Repositories/ProductRepo.php b/beike/Repositories/ProductRepo.php index d3ad7d40..6323dfd2 100644 --- a/beike/Repositories/ProductRepo.php +++ b/beike/Repositories/ProductRepo.php @@ -14,6 +14,11 @@ namespace Beike\Repositories; use Beike\Models\Attribute; use Beike\Models\AttributeValue; use Beike\Models\Product; +use Beike\Models\ProductAttribute; +use Beike\Models\ProductCategory; +use Beike\Models\ProductDescription; +use Beike\Models\ProductRelation; +use Beike\Models\ProductSku; use Beike\Shop\Http\Resources\ProductSimple; use Illuminate\Database\Eloquent\Builder; use Illuminate\Database\Eloquent\Collection; @@ -370,6 +375,16 @@ class ProductRepo public static function forceDeleteTrashed() { - Product::onlyTrashed()->forceDelete(); + $products = Product::onlyTrashed(); + + $productsIds = $products->pluck('id')->toArray(); + + ProductRelation::query()->whereIn('product_id', $productsIds)->orWhere('relation_id', $productsIds)->delete(); + ProductAttribute::query()->whereIn('product_id', $productsIds)->delete(); + ProductCategory::query()->whereIn('product_id', $productsIds)->delete(); + ProductSku::query()->whereIn('product_id', $productsIds)->delete(); + ProductDescription::query()->whereIn('product_id', $productsIds)->delete(); + + $products->forceDelete(); } } diff --git a/resources/lang/en/admin/attribute.php b/resources/lang/en/admin/attribute.php index f1d380ef..c09b5b2d 100644 --- a/resources/lang/en/admin/attribute.php +++ b/resources/lang/en/admin/attribute.php @@ -20,4 +20,5 @@ return [ 'btn_at' => 'Go now', 'btn_later' => 'Later', 'to_info_values' => 'Please go to the details page to edit attribute values', + 'error_cannot_delete_product_used' => 'Attribute used by products (ID: :product_ids), can not be deleted!' ]; diff --git a/resources/lang/en/admin/attribute_groups.php b/resources/lang/en/admin/attribute_groups.php index d3a87b87..3b7fefaf 100644 --- a/resources/lang/en/admin/attribute_groups.php +++ b/resources/lang/en/admin/attribute_groups.php @@ -12,5 +12,5 @@ return [ 'index' => 'Attribute group', 'create_at_groups' => 'Create attribute group', - 'error_cannot_delete_attribute_used' => 'Attribute Group used by attribute (ID: attributes), can not be deleted!' + 'error_cannot_delete_attribute_used' => 'Attribute Group used by attribute (ID: :attributes), can not be deleted!' ]; diff --git a/resources/lang/zh_cn/admin/attribute.php b/resources/lang/zh_cn/admin/attribute.php index 68336795..edebfce2 100644 --- a/resources/lang/zh_cn/admin/attribute.php +++ b/resources/lang/zh_cn/admin/attribute.php @@ -20,4 +20,5 @@ return [ 'btn_at' => '立即前往', 'btn_later' => '稍后再去', 'to_info_values' => '请前往详情页编辑属性值', + 'error_cannot_delete_product_used' => '属性不能删除,由于该属性被商品(商品ID: :product_ids)使用' ];