找不到Magento 2.3升级表

时间:2019-02-04 10:27:49

标签: magento magento-2.3

您好,我刚刚将项目从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_idproduct_idpositionis_parentstore_id,   visibility)选择catalog_category_product_index_store1。* FROM   catalog_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

2 个答案:

答案 0 :(得分:1)

我找到了根本原因:

有一个插件(Magento \ Catalog \ Model \ Indexer \ Category \ Product \ Plugin \ TableResolver),该插件将_store1后缀添加到$ setup-> getTable()调用中。这对于主应用程序非常有用,但是$ setup-> getTable()也在数据迁移期间使用,该数据迁移是在首次创建_storeX表时运行的,我们需要原始表名来运行该迁移。

我通过覆盖迁移数据补丁解决了该问题: Magento \ Catalog \ Setup \ Patch \ Data \ EnableSegmentation.php

执行以下操作:

  1. 要么为此覆盖创建一个新模块,要么使用一个现有模块。创建在线可用模块有很多演练。

  2. 将Magento \ Catalog \ Setup \ Patch \ Data \ EnableSegmentation.php复制到模块中的同一路径。因此,如果您的模块位于app \ code \ Company \ PatchFix中,则将文件复制到app \ code \ Company \ PatchFix \ Setup \ Patch \ Data \ EnableSegmentation.php。

  3. 在复制的文件中,在第7行中更新名称空间:

namespace Company\PatchFix\Setup\Patch\Data;
  1. 在定义$ setup对象之后(在第58行附近)添加以下代码:
        // 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结尾。

  1. 将以后所有对$setup->getTable('catalog_category_product_index')的调用替换为$catalogCategoryProductIndexTablename

  2. 保存您的更改。

  3. 如果您的模块没有etc/di.xml文件,请从头创建一个文件或从另一个模块复制一个文件。同样,在线提供了一些指南来向您展示如何执行此操作。

  4. 向新数据补丁中添加替代首选项:

    <preference for="Magento\Catalog\Setup\Patch\Data\EnableSegmentation" type="Company\PatchFix\Setup\Patch\Data\EnableSegmentation" />
  1. 保存etc / di.xml。

  2. 运行setup:upgrade

答案 1 :(得分:0)

您是否尝试过重新编制索引?

使用命令行在您的Magento主目录中:

php bin/magento indexer:reindex