|
|
@@ -667,34 +667,27 @@ class FlexibleVariantController extends Controller
|
|
|
* 2. All resulting Media IDs (new + existing) are synced into
|
|
|
* the product_variant_images pivot table with position order.
|
|
|
*/
|
|
|
- public function syncVariantImages(int $id, Request $request): JsonResponse
|
|
|
+ public function syncVariantImages( Request $request): JsonResponse
|
|
|
{
|
|
|
$this->validate($request, [
|
|
|
- 'media_ids' => 'array',
|
|
|
- 'media_ids.*' => 'integer|exists:media,id',
|
|
|
- 'uploads' => 'array',
|
|
|
- 'uploads.*' => 'image|max:5120',
|
|
|
+ 'variant_ids' => 'array',
|
|
|
+ 'variant_ids.*' => 'required|exists:product_variants,id',
|
|
|
+ 'media_id' => 'integer|exists:media,id',
|
|
|
+ 'file' => 'image|max:5120',
|
|
|
]);
|
|
|
|
|
|
- $variant = ProductVariant::findOrFail($id);
|
|
|
+ $variant = ProductVariant::findOrFail($request->variant_ids);
|
|
|
|
|
|
$mediaIds = collect($request->input('media_ids', []));
|
|
|
|
|
|
if ($request->hasFile('uploads')) {
|
|
|
foreach ($request->file('uploads') as $file) {
|
|
|
- $media = $variant
|
|
|
- ->addMedia($file)
|
|
|
- ->toMediaCollection(ProductVariant::IMAGES_COLLECTION);
|
|
|
-
|
|
|
- $mediaIds->push($media->id);
|
|
|
+ $media = $variant->addMedia($file)->toMediaCollection(ProductVariant::IMAGES_COLLECTION);
|
|
|
+ $variant->variantImages()->attach($media->id, ['position' => 0]);
|
|
|
}
|
|
|
}
|
|
|
|
|
|
- $syncData = $mediaIds->values()->mapWithKeys(
|
|
|
- fn ($mediaId, $i) => [$mediaId => ['position' => $i]]
|
|
|
- );
|
|
|
-
|
|
|
- $variant->variantImages()->sync($syncData);
|
|
|
+ $variant->variantImages()->sync($mediaIds->toArray());
|
|
|
|
|
|
return response()->json([
|
|
|
'success' => true,
|