乔纳森·戴 https://stackoverflow.com/users/336905/jonathan-day says
“更新不应采用以下形式
SQL命令”。我没遇到过
任何 DDL 或 DML 语句不能
通过 Magento 的配置执行
结构。
(在问题中如何将配置更改从开发环境迁移到生产环境? https://stackoverflow.com/q/4208030/471559)
我想知道如何最好地以这种方式向表添加/修改/删除列或索引,但不依赖 SQL?有可能吗?
此外,还有哪些操作只能在 SQL 中完成?
您可以在安装脚本中使用此类方法:
-
Use Varien_Db_Ddl_Table
类来创建新表,您可以在其中组合配置所有字段、键、关系$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()
method adds new column to exiting table. It has such parameters:
-
$tableName
- 需要修改的表名
-
$columnName
- 应添加的列的名称
-
$definition
- 列的定义(INT(10)
, DECIMAL(12,4)
, etc)
-
addConstraint()
method creates a new constraint foreign key. It has such parameters
-
$fkName
- 外键名称,如果您不指定,每个数据库应该是唯一的FK_
前缀,会自动添加
-
$tableName
- 添加外键的表名
-
$columnName
- 应该引用另一表的列名,如果您有复杂的外键,请使用逗号指定多个列
-
$refTableName
- 将要处理的外部表名称
-
$refColumnName
- 外部表中的列名
-
$onDelete
- 在外部表中删除行的操作。可以是空字符串(什么都不做),cascade
, set null
。该字段是可选的,如果不指定,cascade
将使用值。
-
$onUpdate
对外表中行键更新的操作。可以是空字符串(什么都不做),cascade
, set null
。该字段是可选的,如果不指定,cascade
将使用值。
-
$purge
- 用于在添加外键后启用行清理的标志(例如删除未引用的记录)
-
addKey()
method is used for adding of indexes to a table. It has such parameters:
-
$tableName
- 应添加索引的表名
-
$indexName
- 索引名称
-
$fields
- 索引中使用的列名
-
$indexType
- 索引的类型。可能的值为:index
, unique
, primary
, fulltext
。该参数是可选的,因此默认值为index
-
dropColumn()
method is used for removing of columns from the existing table. It has such parameters:
-
$tableName
- 需要修改的表名
-
$columnName
- 应删除的列的名称
-
dropForeignKey()
method is used for removing of foreign keys. It has such parameters:
-
$tableName
- 删除外键的表名
-
$fkName
- 外键名称
-
dropKey()
method is used for removing of the table indexes. It has such parameters:
-
$tableName
- 应删除索引的表名
-
$keyName
- 索引名称
-
modifyColumn
method is used to modify existing column in the table. It has such parameters:
-
$tableName
- 需要修改的表名
-
$columnName
- 应该重命名的列的名称
-
$definition
- 列的新定义(INT(10)
, DECIMAL(12,4)
, etc)
-
changeColumn
method is used to modify and rename existing column in the table. It has such parameters:
-
$tableName
- 需要修改的表名
-
$oldColumnName
- 列的旧名称,应重命名和修改
-
$newColumnName
- 列的新名称
-
$definition
- 列的新定义(INT(10)
, DECIMAL(12,4)
, etc)
-
changeTableEngine
method is used to change table engine, from MyISAM to InnoDB for instance. It has such parameters:
-
$tableName
- 表名
-
$engine
- 新引擎名称(MEMORY
, MyISAM
, InnoDB
, etc)
您也可以使用tableColumnExists
检查列是否存在的方法。
这不是您可以使用的摆脱直接 SQL 查询编写的方法的完整列表。您可以在以下位置找到更多信息Varien_Db_Adapter_Pdo_Mysql
and Zend_Db_Adapter_Abstract
类。
不要犹豫,查看您将要使用的类定义,您可以为自己找到很多有趣的东西:)
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)