Ответ 1
Вы можете использовать такие методы в своей настройке script:
-
Используйте класс
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()
метод добавляет новый столбец в выходящую таблицу. Он имеет такие параметры:-
$tableName
- имя таблицы, которое должно быть изменено -
$columnName
- имя столбца, которое должно быть добавлено -
$definition
- определение столбца (INT(10)
,DECIMAL(12,4)
и т.д.)
-
-
addConstraint()
метод создает новый внешний ключ ограничения. Он имеет такие параметры-
$fkName
- имя внешнего ключа должно быть уникальным для каждой базы данных, если вы не укажете префиксFK_
, он будет добавлен автоматически -
$tableName
- имя таблицы для добавления внешнего ключа -
$columnName
- имя столбца, которое следует передать в другую таблицу, если у вас есть сложный внешний ключ, используйте запятую, чтобы указать более одного столбца -
$refTableName
- имя внешней таблицы, которое будет обрабатываться -
$refColumnName
- имя столбца в внешней таблице -
$onDelete
- действие по удалению строки во внешней таблице. Может быть пустая строка (ничего не делать),cascade
,set null
. Это поле является необязательным, и если оно не указано, будет использоваться значениеcascade
. -
$onUpdate
действие по обновлению ключа строки во внешней таблице. Может быть пустая строка (ничего не делать),cascade
,set null
. Это поле является необязательным, и если оно не указано, будет использоваться значениеcascade
. -
$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
, чтобы проверить наличие столбца.
Это не полный список методов, доступных для вас, чтобы избавиться от прямых запросов SQL-запросов. Вы можете найти больше в классах Varien_Db_Adapter_Pdo_Mysql
и Zend_Db_Adapter_Abstract
.
Не стесняйтесь заглядывать в определение класса, которое вы собираетесь использовать, вы можете найти для себя много интересного:)