Drupal → Как добавить новое поле в существующую таблицу БД
Урезанный, но рабочий пример из модуля FileField Paths, который добавляет в таблицу files
новое поле origname
:
/** * Implements hook_schema_alter(). */ function filefield_paths_schema_alter(&$schema) { $schema['files']['fields']['origname'] = array( 'description' => 'Original name of the file.', 'type' => 'varchar', 'length' => 255, 'not null' => TRUE, 'default' => '', ); } /** * Implements hook_install(). */ function filefield_paths_install() { db_add_field($ret = array(), 'files', 'origname', array( 'description' => 'Original name of the file.', 'type' => 'varchar', 'length' => 255, 'not null' => TRUE, 'default' => '', )); } /** * Implements hook_uninstall(). */ function filefield_paths_uninstall() { db_drop_field($ret = array(), 'files', 'origname'); }
Код находится в файле filefield_paths.install
.
А вот более универсальный вариант для добавления нескольких полей:
/** * Implements hook_schema_alter() */ function mymodule_schema_alter(&$schema) { if (isset($schema['table_name'])) { $schema['table_name']['fields']['field_1'] = array( 'type' => 'varchar', 'length' => 100, 'not null' => TRUE, 'default' => '', ); $schema['table_name']['fields']['field_2'] = array( 'type' => 'int', 'unsigned' => TRUE, 'not null' => TRUE, 'size' => 'tiny', 'default' => 0, ); } } /** * Implements hook_install() */ function mymodule_install() { $schema = array('table_name' => array()); mymodule_schema_alter($schema); foreach ($schema['table_name']['fields'] as $field => $spec) { db_add_field($ret = array(), 'table_name', $field, $spec); } } /** * Implements hook_uninstall() */ function mymodule_uninstall() { $schema = array('table_name' => array()); mymodule_schema_alter($schema); foreach ($schema['table_name']['fields'] as $field => $spec) { db_drop_field($ret = array(), 'table_name', $field); } }
Комментарии
для Drupal 7 очень было бы здорово, черкнуть, спасибо
У меня почему-то не работает. Хочу добавить поле service в таблицу comments. Создал свой модуль, как написано в одном из ваших уроков. Код такой:
Не подскажете, в чем дело может быть?
Уже понял. Во-первых, нужно было всё это писать в файле mymodule.install, во-вторых, в конце не нужно ?>. Может, поможет кому)
Оставить комментарий