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

16.01.2010

Таблицы описываются в файле с расширением .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
Похожие записи

Комментарии

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

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

Гость
17.06.2011, 12:18

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

Гость
17.06.2011, 15:13

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

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

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

Гость
17.06.2011, 15:18

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

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

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

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

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

Гость
17.06.2011, 15:23

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

Гость
13.11.2012, 11:56

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

my_module_install() {

}

и
my_module_uninstall() {

}

А как в 8ке? К примеру поставил модуль с орга entity browser. Файл entity_browser.install есть а файла uninstall нет. Значит ли єто что модуль после удаления не прибирает за собой?

Гость
18.06.2017, 14:34

А как в 8ке? К примеру поставил модуль с орга entity browser. Файл entity_browser.install есть а файла uninstall нет. Значит ли єто что модуль после удаления не прибирает за собой?

uninstall файла и не должно быть, оба хука hook_install() и hook_uninstall() всегда пишутся в .install файл. И hook_uninstall() требуется не для каждого модуля.

Добавить комментарий