当前位置: 技术文章>> 如何在重新索引Magento 2时修复无效的列数据类型

文章标题:如何在重新索引Magento 2时修复无效的列数据类型
  • 文章分类: Magento
  • 18461 阅读
系统学习magento二次开发,推荐小册:《Magento中文全栈二次开发 》

本小册面向Magento2以上版本,书代码及示例兼容magento2.0-2.4版本。涵盖了magento前端开发,后端开发,magento2主题,magento2重写,magento2 layout,magento2控制器,magento2 block等相关内容,带领您成为magento开发技术专家。


在重新索引Magento 2时修复无效列数据类型的步骤:

步骤1:转到以下路径

vendor/magento/module-eav/model/resourceModel/Helper.php

将以下行插入 getDdlTypeByColumnType() 函数

   case 'int unsigned':
                $columnType = 'int';
                break;
            case 'smallint unsigned':
                $columnType = 'smallint';
                break;
            case 'bigint unsigned':
                 $columnType = 'bigint';
                 break;

所以之前的getDdlTypeByColumnType()函数看起来像这样

public function getDdlTypeByColumnType($columnType)
{
    switch ($columnType)
    {
        case 'char':
        case 'varchar':
            $columnType = 'text';
            break;
        case 'tinyint':
            $columnType = 'smallint';
            break;
        default:
            break;
    }
    return array_search($columnType, $this->_ddlColumnTypes);
}

现在getDdlTypeByColumnType()函数已更改如下

public function getDdlTypeByColumnType($columnType)
{
     switch ($columnType)
     {
            case 'int unsigned':
                $columnType = 'int';
                break;
            case 'smallint unsigned':
                $columnType = 'smallint';
                break;
            case 'bigint unsigned':
                 $columnType = 'bigint';
                 break;
            case 'char':
            case 'varchar':
                $columnType = 'text';
                break;
            case 'tinyint':
                $columnType = 'smallint';
                break;
            default:
                break;
     }
     return array_search($columnType, $this->_ddlColumnTypes);
}

结论:

因此,这样您就可以在Magento 2中重新索引时摆脱无效的列数据类型。此外,如果您遇到诸如“索引被另一个重新索引进程锁定”之类的错误。


推荐文章