您好,我刚刚将项目从magento 2.2.6升级到2.3,并且在执行 setup:upgrade
时遇到了这个问题SQLSTATE [42S02]:未找到基表或视图:1146表 'catalog_category_product_index_store1_store1'不存在,查询 原为:INSERT INTO
catalog_category_product_index_store1_store1
({category_id
,product_id
,position
,is_parent
,store_id
,visibility
)选择catalog_category_product_index_store1
。* FROMcatalog_category_product_index_store1
在(store_id ='1')开启的位置 重复键更新category_id
=值(category_id
),product_id
= VALUES(product_id
),position
= VALUES(position
),is_parent
= VALUES(is_parent
),store_id
= VALUES(store_id
),visibility
= VALUES(visibility
)
答案 0 :(得分:1)
我找到了根本原因:
有一个插件(Magento \ Catalog \ Model \ Indexer \ Category \ Product \ Plugin \ TableResolver),该插件将_store1后缀添加到$ setup-> getTable()调用中。这对于主应用程序非常有用,但是$ setup-> getTable()也在数据迁移期间使用,该数据迁移是在首次创建_storeX表时运行的,我们需要原始表名来运行该迁移。
我通过覆盖迁移数据补丁解决了该问题: Magento \ Catalog \ Setup \ Patch \ Data \ EnableSegmentation.php
执行以下操作:
要么为此覆盖创建一个新模块,要么使用一个现有模块。创建在线可用模块有很多演练。
将Magento \ Catalog \ Setup \ Patch \ Data \ EnableSegmentation.php复制到模块中的同一路径。因此,如果您的模块位于app \ code \ Company \ PatchFix中,则将文件复制到app \ code \ Company \ PatchFix \ Setup \ Patch \ Data \ EnableSegmentation.php。
在复制的文件中,在第7行中更新名称空间:
namespace Company\PatchFix\Setup\Patch\Data;
// Get the index table name once
$catalogCategoryProductIndexTableName = $setup->getTable('catalog_category_product_index');
// This table name will probably not end with _index, but we need it to for this patch to work
if (substr($catalogCategoryProductIndexTableName, -5) !== 'index') {
while (substr($catalogCategoryProductIndexTableName, -5) !== 'index') {
$catalogCategoryProductIndexTableName = substr($catalogCategoryProductIndexTableName, 0,
strlen($catalogCategoryProductIndexTableName) - 1);
}
}
它只是一次从表名称中删除结尾字符,直到以index
结尾。
将以后所有对$setup->getTable('catalog_category_product_index')
的调用替换为$catalogCategoryProductIndexTablename
。
保存您的更改。
如果您的模块没有etc/di.xml
文件,请从头创建一个文件或从另一个模块复制一个文件。同样,在线提供了一些指南来向您展示如何执行此操作。
向新数据补丁中添加替代首选项:
<preference for="Magento\Catalog\Setup\Patch\Data\EnableSegmentation" type="Company\PatchFix\Setup\Patch\Data\EnableSegmentation" />
保存etc / di.xml。
运行setup:upgrade
。
答案 1 :(得分:0)
您是否尝试过重新编制索引?
使用命令行在您的Magento主目录中:
php bin/magento indexer:reindex