У меня есть модуль, и у меня есть обновление, чтобы изменить таблицу базы данных, в ближайшее время мне нужно сделать что-то вроде
ALTER TABLE `TABLE` ADD `FIELD` INT UNSIGNED NOT NULL AFTER `SOME_FIELD`
так есть ли встроенная функция в Drupal для внесения этих изменений? Я считал, что функция db_add_field
не работает?
Султан
Использование db_add_field()
db_add_field('TABLE', 'FIELD', "VARCHAR( 255 ) NOT NULL DEFAULT '0' AFTER FIELD_2");
Вышеприведенное не работает, для одного он не учитывает первый аргумент (ссылка на $ret), а четвертый аргумент не разрешает сырой SQL-запрос, а только структурированный массив.
Мне нужно было сделать это (замените hook_update_N на modulename_update_XXXX в соответствии с документацией drupal api, конечно):
function hook_update_N(&$sandbox) {
// We use update_sql here, instead of db_add_field because we cannot specify
// AFTER in the db_add_field.
$ret = array();
$ret[] = update_sql("ALTER TABLE {table} ADD `FIELD` INT UNSIGNED NOT NULL AFTER `SOME_FIELD`");
return $ret;
}
Надеюсь, это поможет кому-то еще.