当前位置: 首页 > 面试题库 >

不使用SQL的Magento安装脚本中的ALTER TABLE

朱阳曜
2023-03-14
问题内容

“更新不应采用SQL命令的形式”。我没有遇到任何无法通过Magento的配置结构执行的DDL或DML语句。

我想知道如何最好地以这种方式在表中添加/修改/删除表中的列或索引,但又不依赖SQL?可能吗

此外,只能在SQL中执行哪些其他操作?


问题答案:

您可以在安装脚本中使用以下方法:

  • 使用Varien_Db_Ddl_Tableclass创建新表,您可以在其中结合$this->getConnection()->createTable($tableObject) 示例配置所有字段,键,关系:

    /* @var $this Mage_Core_Model_Resource_Setup */
    

    $table = new Varien_Db_Ddl_Table();
    $table->setName($this->getTable(‘module/table’));
    $table->addColumn(‘id’, Varien_Db_Ddl_Table::TYPE_INT, 10,
    array(‘unsigned’ => true, ‘primary’ => true));


    $table->addColumn(‘name’, Varien_Db_Ddl_Table::TYPE_VARCHAR, 255);
    $table->addIndex(‘name’, ‘name’);
    $table->setOption(‘type’, ‘InnoDB’);
    $table->setOption(‘charset’, ‘utf8’);

    $this->getConnection()->createTable($table);

  • 使用设置连接($this->getConnection())方法:

    • addColumn()方法将新列添加到退出表。它具有以下参数
    • $tableName -应该修改的表名
    • $columnName-列名,应添加
    • $definition-列的定义(INT(10)DECIMAL(12,4)等)
    • addConstraint()方法创建一个新的约束外键。它有这样的参数
    • $fkName-外键名称在每个数据库中应该是唯一的,如果不指定FK_前缀,它将自动添加
    • $tableName -用于添加外键的表名
    • $columnName -应该引用到另一张表的列名,如果您具有复杂的外键,请使用逗号指定多个列
    • $refTableName -外部表名,将被处理
    • $refColumnName -外部表中的列名
    • $onDelete-对删除外部表中的行的操作。可以为空字符串(不执行任何操作)cascade、、set null。该字段是可选的,如果未指定,cascade将使用value。
    • $onUpdate外表中行键更新的操作。可以为空字符串(不执行任何操作)cascade、、set null。该字段是可选的,如果未指定,cascade将使用value。
    • $purge -用于在添加外键后清除行的标志(例如,删除未引用的记录)
    • addKey()方法用于向表添加索引。它具有以下参数:
    • $tableName -应该在其中添加索引的表名
    • $indexName -索引名称
    • $fields -索引中使用的列名
    • $indexType-索引的类型。可能的值有:indexuniqueprimaryfulltext。此参数是可选的,因此默认值为index
    • dropColumn()方法用于从现有表中删除列。它具有以下参数:
    • $tableName -应该修改的表名
    • $columnName-应删除的列名
    • dropForeignKey()方法用于删除外键。它具有以下参数:
    • $tableName -用于删除外键的表名
    • $fkName -外键名称
    • dropKey()方法用于删除表索引。它具有以下参数:
    • $tableName -应该删除索引的表名
    • $keyName -索引名称
    • modifyColumn方法用于修改表中的现有列。它具有以下参数:
    • $tableName -应该修改的表名
    • $columnName-列名,应重命名
    • $definition-列的新的定义(INT(10)DECIMAL(12,4)等)
    • changeColumn方法用于修改和重命名表中的现有列。它具有以下参数:
    • $tableName -应该修改的表名
    • $oldColumnName-列的旧名称,应重命名和修改
    • $newColumnName-列的新名称
    • $definition-列的新的定义(INT(10)DECIMAL(12,4)等)
    • changeTableEngine方法用于将表引擎从MyISAM更改为InnoDB。它具有以下参数:
    • $tableName -表名
    • $engine-新的引擎名称(MEMORYMyISAMInnoDB等)

您也可以使用tableColumnExistsmethod检查该列的存在。

它不是摆脱直接SQL查询编写的可用方法的完整列表。您可以在Varien_Db_Adapter_Pdo_MysqlZend_Db_Adapter_Abstract类中找到更多信息。

不要犹豫,将要使用的类定义,可以为自己找到很多有趣的东西:)



 类似资料:
  • 问题内容: 我正在尝试为我的扩展程序创建安装脚本,由于某种原因,它不会安装脚本。该扩展名将显示在core_resource表中,但是我要创建的属性不会创建。 我非常确定该脚本甚至没有被调用,因为我在开头放置了exit()并且该站点运行得很好。 这是我的配置XML文件中的内容。这放置在全局->资源路径中: 我的安装脚本如下: 有什么明显的我想念的地方是脚本无法运行的原因吗? 问题答案: 在本文中逐步

  • 网友提供了一键部署多个应用的脚本,不会部署 MinDoc 的可以使用脚本部署: https://github.com/goodboy23/shell-script-collection 一键安装LNMP,Redis,Python3,maven,redis集群等服务和环境初始化,性能优化等操作 拥有大量检测,可以用于生产环境(当前未测试完全)使用,当中途报错,解决后可再次执行,不会覆盖操作 支持自定

  • 问题内容: 我想使用NSIS脚本安装Java,但是我必须知道系统(Windows)中是否安装了Java。根据注册码,如何检查是否已安装Java? 有人可以提供NSIS脚本来根据注册密钥检查Java安装吗? 问题答案: 我没有编译它,但是我会尝试跟随。我基于如何检测Windows上已安装的Sun JRE选择了注册表项?。

  • # 通用安装脚本——sut 通用安装脚本用于将软件整合到离线系统,并且整合是原生整合,而非通过应答实现。这意味着可以大大缩短系统安装时间。 [ 下载SutWizard 1.0.0.2 ] 核心思想 安装一个软件其实很大程度上可以理解为,释放文件然后在导入相关注册表。因此理论上我们只需要把这些动作捕获,得到一个差异集合。那么就可以转移到其他相似的系统中。 sut通用安装脚本就是如此,第一阶段:释放

  • 本文向大家介绍使用shell脚本安装lnmp的方法步骤,包括了使用shell脚本安装lnmp的方法步骤的使用技巧和注意事项,需要的朋友参考一下 1、简介 使用shell脚本安装lnmp,纯粹是偷懒,平时安装一些东西都写成脚本了,方便以后在其他机器安装的时候不用再去查找文档。 PHP版本5.6.6 MYSQL版本5.6.26 NGINX版本1.15.6 2、环境说明 阿里云ECS(1G1核)Cent

  • 我们如何以编程的方式安装 Composer? 如下载页面所指出的,这个安装程序包含一个签名,当安装程序代码发生改变时,它会随之发生改变,因此不应该长期依赖。 还有另一种方法,就是使用只对 UNIX 实用程序工作的脚本: #!/bin/sh EXPECTED_SIGNATURE="$(wget -q -O - https://composer.github.io/installer.sig)" p