“更新不应采用SQL命令的形式”。我没有遇到任何无法通过Magento的配置结构执行的DDL或DML语句。
我想知道如何最好地以这种方式在表中添加/修改/删除表中的列或索引,但又不依赖SQL?可能吗
此外,只能在SQL中执行哪些其他操作?
您可以在安装脚本中使用以下方法:
使用Varien_Db_Ddl_Tableclass创建新表,您可以在其中结合$this->getConnection()->createTable($tableObject) 示例配置所有字段,键,关系:
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())方法:
$this->getConnection()
addColumn()
$tableName
$columnName
$definition
INT(10)
DECIMAL(12,4)
addConstraint()
$fkName
FK_
$refTableName
$refColumnName
$onDelete
cascade
set null
$onUpdate
$purge
addKey()
$indexName
$fields
$indexType
index
unique
primary
fulltext
dropColumn()
dropForeignKey()
dropKey()
$keyName
modifyColumn
changeColumn
$oldColumnName
$newColumnName
changeTableEngine
$engine
MEMORY
MyISAM
InnoDB
您也可以使用tableColumnExistsmethod检查该列的存在。
tableColumnExists
它不是摆脱直接SQL查询编写的可用方法的完整列表。您可以在Varien_Db_Adapter_Pdo_Mysql和Zend_Db_Adapter_Abstract类中找到更多信息。
Varien_Db_Adapter_Pdo_Mysql
Zend_Db_Adapter_Abstract
不要犹豫,将要使用的类定义,可以为自己找到很多有趣的东西:)