xandeadx.ru Блог музицирующего веб-девелопера

Drupal → Создание и удаление таблиц базы данных в своём модуле

Опубликовано в

Таблицы описываются в файле с расширением .install и хуке hook_shema(). Затем с помощью хука hook_install() добавляются в базу при инсталляции модуля, и удаляются с помощью хука hook_uninstall() при удалении модуля на странице admin/build/modules/uninstall

<?php // файл mymodule.install
 
/**
 * Реализация hook_schema()
 * Описываем таблицу table1 с двумя полями — nid и sometext
 */
function mymodule_schema() {
    $schema['table1'] = array(
        'description' => 'The base table for mymodule.',
        'fields' => array(
            // описание поля nid
            'nid' => array(
                'description' => t('Node ID'),
                'type' => 'serial',
                'unsigned' => true,
                'not null' => true,
            ),
            // описание поля sometext
            'sometext' => array(
                'description' => t('Some text'),
                'type' => 'varchar',
                'length' => 255,
                'not null' => true,
                'default' => '',
            ),
        ),
        'primary key' => array('nid'),
    );
 
    return $schema;
}
 
/**
 * Реализация hook_install()
 * Создание таблицы table1 при инсталляции модуля
 */
function mymodule_install() {
    drupal_install_schema('mymodule');
}
 
/**
 * Реализация hook_uninstall()
 * Удаление таблицы table1 при удалении модуля
 */
function mymodule_uninstall() {
    drupal_uninstall_schema('mymodule');
}
Написанное актуально для Drupal 6.x
Похожие записи

Комментарии RSS

У Меня почему-то не работает.
При этом drupal никаких ошибок или предупреждений не выдает(

В какую сторону смотреть?

смотрите исходники других модулей, сравнивайте, пробуйте. если не поможет — http://drupal.org/project/issues/drupal

разве не drupal_install_schema('table1');

нет

окей, почему может быть такая ситуация (друпал 7):
- при установке модуля таблицы создаются, однако выводистя ошибка типа тиблица уже существует
- после удаления модуля через admin/modules/uninstall таблицы не удаляются

видимо забыли drupal_uninstall_schema

а вот и нет. не забыл.
даже если вручную после удаления модуля удаляю талицы, удаляю запись о моем модуле в таблице system, всёравно после установки модуля получаю ошибку, что таблица уже создана

DatabaseSchemaObjectExistsException: Таблица <em class="placeholder">mymegatable_stats</em> уже существует. в функции DatabaseSchema->createTable() (строка 629 в файле /home/www/luciuz/data/www/lalala.ru/includes/database/schema.inc).

и таблица действительно создается. откуда ошибка -- не понятно. почему таблицы сами не удаляются -- тоже не понятно.

аа... понял
прописал как
drupal_install_schema('table1');
drupal_install_schema('table2');

где 'table1', 'table2' мои таблицы в хуке Schema... -- действительно в мануалах везде пишут модуль, но с модулем не работает.

думаю с удалением таже баня

прописал как
drupal_install_schema('table1');
drupal_install_schema('table2');

это не будет работать

с удалением видимо какая-то др трабла. по наитию решить не получилось

Для семерки не надо прописывать

my_module_install() {

}

и
my_module_uninstall() {

}

Оставить комментарий

Содержимое этого поля является приватным и не будет отображаться публично. Если у вас есть аккаунт в Gravatar, привязанный к этому e-mail адресу, то он будет использован для отображения аватара.
  • Адреса страниц и электронной почты автоматически преобразуются в ссылки.
  • Доступные HTML теги: <a> <i> <b> <strong> <code> <ul> <ol> <li> <blockquote> <em> <s>
  • Строки и параграфы переносятся автоматически.
  • Подсветка кода осуществляется с помощью тегов: <code>, <css>, <html>, <ini>, <javascript>, <sql>, <php>. Поддерживаемые стили выделения кода: <foo>, [foo].

Подробнее о форматировании