Shopware 6执行迁移时出现1062唯一键重复错误求助
问题分析与解决
错误信息
内部服务器错误
执行查询时发生异常:SQLSTATE[23000]: 完整性约束违规:1062 键 'custom_field.uniq.custom_field.name' 的条目 'swag_example_size' 重复
提供的迁移代码
<?php declare(strict_types=1); namespace SwagShopFinder\Migration; use Doctrine\DBAL\Connection; use Shopware\Core\Framework\Migration\MigrationStep; /** * @internal */ class Migration1741862942 extends MigrationStep { public function getCreationTimestamp(): int { return 1741862942; } public function update(Connection $connection): void { $connection->exec("CREATE TABLE IF NOT EXISTS swag_shop_finder ( `id` BINARY(16) NOT NULL, active TINYINT(1) NULL DEFAULT '0', name VARCHAR(255) NOT NULL, street VARCHAR(255) NOT NULL, post_code VARCHAR(255) NOT NULL, city VARCHAR(255) NOT NULL, url VARCHAR(255) NULL, telephone VARCHAR(255) NULL, open_times LONGTEXT NULL, country_id BINARY(16) NULL, createdAt DATETIME(3), updatedAt DATETIME(3), PRIMARY KEY (id), KEY `fk_swag_shop_finder_country_id` (country_id), CONSTRAINT `fk_swag_shop_finder_country_id` FOREIGN KEY (country_id) REFERENCES country (id) ON DELETE RESTRICT ON UPDATE CASCADE ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci; "); } }
问题原因
你提供的迁移代码仅负责创建swag_shop_finder表,和错误中提到的custom_field表唯一键冲突无关。该错误说明系统内已存在名为swag_example_size的自定义字段,而你当前的某项操作(可能是其他迁移文件、插件安装逻辑或自定义字段注册代码)试图重复创建这个字段,触发了custom_field表name字段的唯一约束。
解决步骤
确认重复字段
执行SQL查询验证custom_field表中的重复条目:SELECT * FROM custom_field WHERE name = 'swag_example_size';处理重复字段
- 若该字段无保留必要,直接删除:
DELETE FROM custom_field WHERE name = 'swag_example_size'; - 若需要保留该字段,排查并移除代码中重复创建
swag_example_size字段的逻辑(可能存在于其他迁移文件、插件的自定义字段配置中)。
- 若该字段无保留必要,直接删除:
重新执行操作
处理完重复字段后,重新运行触发错误的迁移或操作即可。
内容的提问来源于stack exchange,提问作者Gjergj Kadriu
相关产品推荐
相关产品推荐

