ERP 每晚同步商品后,后台图库会多出一张肉眼完全相同的图片:/a/b/photo.jpg、/a/b/photo_1.jpg、/a/b/photo_2.jpg。清图片缓存没有用,因为数据库确实新增了 Gallery 记录。
先确认重复的是文件、记录还是商店视图
SELECT mg.value_id, mg.value, mg.media_type,
v.store_id, v.position, v.disabled
FROM catalog_product_entity_media_gallery mg
JOIN catalog_product_entity_media_gallery_value v
ON v.value_id = mg.value_id
WHERE v.entity_id = :product_id
ORDER BY mg.value, v.store_id;
同一个 value_id 有多条 store 记录属于作用域数据,不一定重复;不同 value_id 指向不同后缀文件,才是反复新增。
同步代码不要每次都addImage
常见代码只判断远程 URL 是否变化,却没有按 Magento 中的规范化媒体路径找现有图片。URL 带时间参数、大小写不同或前导斜杠不同,比较都会失败。
我的修复是先计算稳定的源图片业务键,查询商品已有 Gallery,内容未变时更新 label、position、角色,不重新复制文件;内容改变才替换。同步任务重复执行两次,图库行数必须保持不变。
历史数据清理前先确认 image、small_image、thumbnail 是否引用准备删除的文件,并核对其他商品是否共享同一路径。不要按文件名后缀直接批量删。先在副本库生成保留/删除清单,后台抽查角色图,再通过服务层做清理。
修复后连续跑三次同步,并分别在 All Store Views 和一个子视图查看排序、标签和禁用状态。这样才能确认“去重”没有把商店级配置一起抹掉。

