gpt4 book ai didi

magento - 重新索引 Magento 时违反约束/重复键

转载 作者:行者123 更新时间:2023-12-04 22:34:11 25 4
gpt4 key购买 nike

我正在使用 Magento CE 1.6.2 并且我的重新索引器( url_rewrite )有问题

php shell/indexer.php --reindex catalog_url
Catalog URL Rewrites index process unknown error:
exception 'PDOException' with message 'SQLSTATE[23000]: Integrity constraint violation: 1062 Duplicate entry '33432700_1343855802-0-1' for key 'UNQ_CORE_URL_REWRITE_ID_PATH_IS_SYSTEM_STORE_ID'' in /home/website/public_html/lib/Zend/Db/Statement/Pdo.php:228

当我截断 core_url_rewrite... 并第一次通过后端访问索引器时,一切都很好,我的 url 重写存储在 core_url_rewrites...
但是如果我第二次启动索引器(不刷新表),我会收到重复键的错误。

这是我的表的屏幕截图: https://www.dropbox.com/s/6v9uawp5v437w3h/seo_Magewroks.png

注意:UNQ_CORE_URL_REWRITE_ID_PATH_IS_SYSTEM_STORE_ID 是索引键

我怎样才能找到问题的根源?

最佳答案

这应该可以解决问题,

复制核心文件:/app/code/core/Mage/Catalog/Model/Resource/Url.php
至:/app/code/local/Mage/Catalog/Model/Resource/Url.php

找到这个函数:

public function saveRewriteHistory($rewriteData)
{
$rewriteData = new Varien_Object($rewriteData);
// check if rewrite exists with save request_path
$rewrite = $this->getRewriteByRequestPath($rewriteData->getRequestPath(), $rewriteData->getStoreId());

if ($rewrite === false) {
// create permanent redirect
$this->_getWriteAdapter()->insert($this->getMainTable(), $rewriteData->getData());
}

return $this;

}

替换为:
protected $_processedRewrites = array();   // add this to your class vars on top

public function saveRewriteHistory($rewriteData)
{
$rewriteData = new Varien_Object($rewriteData);
// check if rewrite exists with save request_path
$rewrite = $this->getRewriteByRequestPath($rewriteData->getRequestPath(), $rewriteData->getStoreId());
$data = $rewriteData->getData();

$current = $data["id_path"]."_".$data["is_system"]."_".$data["store_id"];
if ($rewrite === false && !in_array($current, $this->_processedRewrites)) {
$this->_processedRewrites[] = $current;
// create permanent redirect
$this->_getWriteAdapter()->insert($this->getMainTable(), $rewriteData->getData());
}

return $this;
}

问题是因为该函数会在插入之前检查数据库以查看 core_url_rewrites 中是否存在重写。这很好。但它使用以下属性进行检查:
request_path, is_system, store_id

我们的问题是有些行重复了 id_path 但具有不同的 request_path ......这很奇怪,不知道为什么不应该......

但是使用此替换功能,它还会检查 id_path 之前是否处理过,如果是,则不会插入它。它解决了问题..

但是,我们仍然不知道问题的根源

关于magento - 重新索引 Magento 时违反约束/重复键,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11781312/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com