“更新不应采用SQL命令的形式”。我没有遇到任何无法通过Magento的配置结构执行的DDL或DML语句。
我想知道如何最好地以这种方式在表中添加/修改/删除表中的列或索引,但又不依赖SQL?可能吗
此外,只能在SQL中执行哪些其他操作?
您可以在安装脚本中使用以下方法:
使用Varien_Db_Ddl_Table
class创建新表,您可以在其中结合$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
-索引的类型。可能的值有:index
,unique
,primary
,fulltext
。此参数是可选的,因此默认值为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
-新的引擎名称(MEMORY
,MyISAM
,InnoDB
等)您也可以使用tableColumnExists
method检查该列的存在。
它不是摆脱直接SQL查询编写的可用方法的完整列表。您可以在Varien_Db_Adapter_Pdo_Mysql
和Zend_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