找不到Magento 2.3升级表
您好,我刚刚将一个项目从magento 2.2.6升级到2.3,在执行设置:升级时遇到此问题 SQLSTATE[42S02]:找不到基表或视图:1146表 “目录\类别\产品\索引\仓库1 \仓库1”不存在,查询 was:插入找不到Magento 2.3升级表,magento,magento-2.3,Magento,Magento 2.3,您好,我刚刚将一个项目从magento 2.2.6升级到2.3,在执行设置:升级时遇到此问题 SQLSTATE[42S02]:找不到基表或视图:1146表 “目录\类别\产品\索引\仓库1 \仓库1”不存在,查询 was:插入目录\类别\产品\索引\仓库1 \仓库1 (类别id,产品id,位置,是父项,存储id, 可见性)从 catalog\u category\u product\u index\u store1WHERE(store\u id='1')ON 重复密钥更新category\u
目录\类别\产品\索引\仓库1 \仓库1
(类别id
,产品id
,位置
,是父项
,存储id
,
可见性
)从
catalog\u category\u product\u index\u store1
WHERE(store\u id='1')ON
重复密钥更新category\u id
=值(category\u id
),
产品标识
=值(产品标识
),位置
=值(位置
),
是父项
=值(是父项
),存储id
=值(存储id
),
可见性
=值(可见性
)
我找到了根本原因: 有一个插件(Magento\Catalog\Model\Indexer\Category\Product\plugin\TableResolver)正在向$setup->getTable()调用添加_store1后缀。这对于主应用程序来说非常有用,但是$setup->getTable()也在数据迁移过程中使用,数据迁移在第一次创建\u storeX表时运行,我们需要原始表名来运行迁移 我通过覆盖迁移数据修补程序解决了此问题: Magento\Catalog\Setup\Patch\Data\EnableSegmentation.php 请执行以下操作:
索引
结束
$setup->getTable('catalog\u category\u product\u index')
的所有调用替换为$catalogCategoryProductIndexTablename
etc/di.xml
文件,请从头创建一个或从另一个模块复制一个。同样,网上也有一些指南向您展示如何做到这一点
安装程序:升级
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);
}
}
<preference for="Magento\Catalog\Setup\Patch\Data\EnableSegmentation" type="Company\PatchFix\Setup\Patch\Data\EnableSegmentation" />