我们的网站有2个商店浏览次数:FR和EN。对于某些产品,导入catalog_product_flat
后,EN商店视图不会刷新。在EAV表中一切都很好。数据重新索引应截断此平面表并用更新的数据填充它。不知怎的,它对某些项目不起作用。
你们有没有人遇到过类似的问题?我很感激有关这个主题的任何线索或建议。
修改
我已经做了进一步的检查,我对EAV表错了。事实证明,catalog_product_entity_varchar
与catalog_product_flat
一致。因此,平面表与EAV表具有相同的数据,但在管理面板中的值是错误的。对于EN商店视图,它们与默认值相同,仅适用于某些产品(魔术?;))。在我的本地PC上我没有遇到这样的问题。这仅适用于我们的生产环境。据我所知,我们不使用任何数据库复制(这可能是这里的问题)。
答案 0 :(得分:3)
Magento使用EAV数据库模型进行简单的升级和开发,因为该模型可以更灵活地使用数据和属性。
在Magento中启用平面目录后,所有上述产品属性(ID,名称,价格)都保存在一个名为catalog_product_flat的表中。然后Magento从平面表中获取产品数据,而不是连接所有其他较小的表。
平面目录有两种类型: 1)扁平目录产品 2)扁平目录类别
启用Flat Catalog类别:
启用Flat Catalog产品:
请记住,最初是
的选择列表管理员面板 - >系统 - >配置 - >目录 - >前端 - >使用平面目录产品 要么, 管理员面板 - >系统 - >配置 - >目录 - >前端 - >使用平面目录产品
不可编辑。您必须从缓存管理重建Flat Catalog。只有这样,选择列表才变得可编辑。
答案 1 :(得分:2)
确保在导入目录产品时,在导入文件中为产品的必需属性提供了正确的值。如果未正确完成,则数据重新索引可能无法正常运行。
在重新编制索引之前,始终建议&明智地从“Cache Management
”&中清除缓存从Magento安装目录的“cache
”文件夹中。
希望它有所帮助。
答案 2 :(得分:0)
我错了。数据库一切正常。问题是从DB检索的属性顺序。
在Mage_Eav_Model_Entity_Abstract
我们可以找到:
$selects = array();
foreach ($this->getAttributesByTable() as $table=>$attributes) {
$selects[] = $this->_getLoadAttributesSelect($object, $table);
}
if (!empty($selects)) {
$values = $this->_getReadAdapter()->fetchAll(implode(' UNION ', $selects));
foreach ($values as $valueRow) {
$this->_setAttribteValue($object, $valueRow);
}
}
行implode(' UNION ', $selects)
连接所有select语句。但是没有ORDER BY
,因此可以按随机顺序检索数据。事实上,对于某些产品来说就像这样。该选择获取商店视图0(始终)和所选商店视图(当前一个)的属性值。
数组$values
包含具有属性属性的数组。订单在这里很重要,因为如果商店视图的属性(例如'name'),例如1将在商店视图0之前进行,然后它将被覆盖。
解决方案是将ORDER BY
子句添加到$selects
或排序$values
数组。