当我尝试重新索引索引(在控制台中)以使它们在前端存储中可见时,我得到了SQLSTATE [23000]:完整性约束违规错误:
SQLSTATE [23000]:完整性约束违规:1062密钥'PRIMARY'重复条目'8942-138-1-265',查询为:INSERT INTO mag_catalog_product_index_eav_idx
(entity_id
, attribute_id
,store_id
,value
)VALUES(?,?,?,?),(?,?,?,?),(?,?,?,?),( ?,?,?,?),(?,?,?,?),(?,?,?,?),(?,?,?,?),(?,?,?,?),(? ?,?,?,?),(?,?,?,?),(?,?,?,?),(?,?,?,?),(?,?,?,?),(? ?,?,?,?),(?,?,?,?),(?,?,?,?),(?,?,?,?),(?,?,?,?),(? ?,?,?,?),(?,?,?,?),(?,?,?,?),(?,?,?,?),(?,?,?,?),(? ?,?,?,?),(?,?,?,?),(?,?,?,?),(?,?,?,?),(?,?,?,?),(? ?,?,?,?),(?,?,?,?),(?,?,?,?),(?,?,?,?),(?,?,?,?),(? ?,?,?,?),(?,?,?,?),(?,?,?,?),(?,?,?,?),(?,?,?,?),(? ?,?,?,?),(?,?,?,?),(?,?,?,?),(?,?,?,?),(?,?,?,?),(? ?,?,?,?),(?,?,?,?),(?,?,?,?),(?,?,?,?),(?,?,?,?),(? ?,?,?,?),(?,?,?,?),(?,?,?,?),(?,?,?,?),(?,?,?,?),(? ?,?,?,?),(?,?,?,?).....
请告诉我该怎么办?谢谢!
答案 0 :(得分:1)
我在我的案例中发现了问题。我的属性属于multiselect
类型。这意味着Magento会将字符串拆分为单独的ID,并为每个选项在索引表中创建唯一键。
但是......如果您的数据库中存在重复值(由于导入失败或其他原因),则会抛出此错误。
就我而言,我的数据库中的value
为227,15,227
,其值为227
2次,引发了上述错误。将值更改为227,15
可以解决此问题。
答案 1 :(得分:1)
问题描述:问题仅限于multiselect
可过滤属性。假设我们从multiselect
选项中为单个值保存单个值。 SKU然后在catalog_product_entity_varchar
表中用逗号分隔存储的值(因为按照multselect
行为,Magento用逗号分隔存储数据)。
解决方案 :
创建cron文件,通过该文件从catalog_product_entity_varchar
表中获取该属性的所有值,然后使用PHP使用(,)逗号进行爆炸,然后创建唯一数组并使用primary_key
再次更新相同的值。
为我工作。
答案 2 :(得分:0)
Magento软件升级后,我们需要使用标准方法通过Shell重新索引数据:
php bin/magento indexer:reindex
如果重新索引任务产生以下错误,则需要通过此script来修复产品实体表中的数据。