From 4f3442190ecb56c17d7ed04dcc355d93efc51bb9 Mon Sep 17 00:00:00 2001 From: baodev0 Date: Wed, 21 Oct 2026 16:59:15 +0700 Subject: [PATCH] fix(products): keep category when update sends null product_categories_id Co-Authored-By: Claude Sonnet 5.5 --- .../Api/Admin/Product/ProductController.php | 4 +++ .../Product/ProductUpdateCategoryTest.php | 35 +++++++++++++++++++ 2 files changed, 39 insertions(+) create mode 100644 tests/Feature/Api/Admin/Product/ProductUpdateCategoryTest.php diff --git a/app/Http/Controllers/Api/Admin/Product/ProductController.php b/app/Http/Controllers/Api/Admin/Product/ProductController.php index 4aff253..e3d87e6 100644 --- a/app/Http/Controllers/Api/Admin/Product/ProductController.php +++ b/app/Http/Controllers/Api/Admin/Product/ProductController.php @@ -173,6 +173,10 @@ class ProductController extends Controller 'features' => 'nullable|array', ]); + if (array_key_exists('product_categories_id', $validated) && $validated['product_categories_id'] === null) { + unset($validated['product_categories_id']); + } + if (isset($validated['name']) && $validated['name'] !== $product->name) { $validated['slug'] = Str::slug($validated['name']); } diff --git a/tests/Feature/Api/Admin/Product/ProductUpdateCategoryTest.php b/tests/Feature/Api/Admin/Product/ProductUpdateCategoryTest.php new file mode 100644 index 0000000..0588e7a --- /dev/null +++ b/tests/Feature/Api/Admin/Product/ProductUpdateCategoryTest.php @@ -0,0 +1,35 @@ + 'Full Administrator', 'guard_name' => 'admin']); + $admin = User::factory()->create(); + $admin->assignRole('Full Administrator'); + $category = ProductCategories::create(['name' => 'VPS', 'slug' => 'vps', 'is_active' => true, 'sort_order' => 1]); + $product = Product::factory()->create(['product_categories_id' => $category->id]); + + $this->actingAs($admin, 'admin') + ->putJson("/api/v1/administrator/products/{$product->id}", [ + 'name' => 'Renamed', + 'product_categories_id' => null, + ]) + ->assertOk(); + + $this->assertSame($category->id, $product->fresh()->product_categories_id); + } +}