我建立了一个cronjob,可以在夜间自动将产品导入我的Magento 1.7.0.2商店。
我的导入工作得很好,只是可配置文章和它的选项之间的连接没有正确更新,如果可配置文章已经存在的话。
因此,我在脚本中添加了一些代码,这些代码会在导入之前删除要导入的项目。
突然之间,出现了以下错误:
exception 'Mage_Core_Exception' with message 'Error in data structure: entity codes are mixed' in /var/www/vhosts/my-domain.de/httpdocs/app/Mage.php:594
Stack trace:
#0 /var/www/vhosts/my-domain.de/httpdocs/app/code/core/Mage/ImportExport/Model/Resource/Import/Data.php(119): Mage::throwException('Error in data s...')
#1 /var/www/vhosts/my-domain.de/httpdocs/app/code/core/Mage/ImportExport/Model/Import.php(326): Mage_ImportExport_Model_Resource_Import_Data->getEntityTypeCode()
#2 /var/www/vhosts/my-domain.de/httpdocs/app/code/local/Webda/Import/Model/Observer.php(88): Mage_ImportExport_Model_Import->importSource()
#3 [internal function]: Webda_Import_Model_Observer->doImport(Object(Aoe_Scheduler_Model_Schedule))
#4 /var/www/vhosts/my-domain.de/httpdocs/app/code/community/Aoe/Scheduler/Model/Observer.php(79): call_user_func_array(Array, Array)
#5 /var/www/vhosts/my-domain.de/httpdocs/app/code/core/Mage/Core/Model/App.php(1338): Aoe_Scheduler_Model_Observer->dispatch(Object(Varien_Event_Observer))
#6 /var/www/vhosts/my-domain.de/httpdocs/app/code/core/Mage/Core/Model/App.php(1317): Mage_Core_Model_App->_callObserverMethod(Object(Aoe_Scheduler_Model_Observer), 'dispatch', Object(Varien_Event_Observer))
#7 /var/www/vhosts/my-domain.de/httpdocs/app/Mage.php(447): Mage_Core_Model_App->dispatchEvent('default', Array)
#8 /var/www/vhosts/my-domain.de/httpdocs/cron.php(46): Mage::dispatchEvent('default')
#9 {main}
所以,当然,我确实撤消了所有最新的更改,但错误仍然存在。
有趣的是:如果我在AOE调度器中启动cronjob,无论是否进行最新更改,它都会正常工作。
因此,我可以明确地说,执行不是问题所在。
我确实检查了表"importexport_importdata",它是空的。
我确实删除了缓存好几次。
更新M2
当调用\Magento\ImportExport\Model\ResourceModel\Import\Data::getUniqueColumnData时,会发生这种情况。此函数期望返回一个值。如果存在多个值,则会出错。
这主要是由于作业中断时importexport_importdata中的剩余数据造成的。该表只是在处理作业时临时保存数据。因此,如果您没有运行导入,您可以假设数据是剩余的。这主要是由第三方导入模块引起的,而不是默认的magento。
/**
* Return request data from import data table
*
* @param string $code parameter name
* @return string
* @throws MagentoFrameworkExceptionLocalizedException
*/
public function getUniqueColumnData($code)
{
$connection = $this->getConnection();
$values = array_unique($connection->fetchCol($connection->select()->from($this->getMainTable(), [$code])));
if (count($values) != 1) {
throw new MagentoFrameworkExceptionLocalizedException(
__('Error in data structure: %1 values are mixed', $code)
);
}
return $values[0];
}
这似乎是一个有点老的问题,但为了防止其他人面临这个问题,我分享了我的经验。
消息Error in data structure: behaviors are mixed
来自类
Mage_ImportExport_Model_Resource_Import_Data
它与表importexport_importdata
中的数据有关。
Magento在导入过程中将数据存储在此表中。
有时,当导入过程失败或被用户停止时,此表中的数据会损坏。
解决方案:
它很简单,只需删除importexport_importdata
表中的所有记录,然后尝试再次执行导入过程。
我见过在对不同数据库进行读/写拆分连接的环境中出现此错误。我也在AWS Aurora上看到过。如果您移回默认设置,错误就会消失
这里也有报道:https://github.com/avstudnitz/AvS_FastSimpleImport/issues/29