Создание таблиц в базе данных Drupal 7.


При разработке собственного модуля для Друпала нередко требуется создать одну или несколько таблиц в базе данных. При этом таблицы должны создаваться автоматически при инсталляции модуля. К счастью, Drupal 7 позволяет это сделать достаточно легко.

Для создания собственной таблицы в базе данных в файле инсталляции (module_name.install) мы должно включить описание необходимой нам таблицы. Используем hook_schema(), где, как всегда, заменяем hook на имя нашего модуля.

Наш хук с описанием может выглядеть примерно так (создаем таблицу gallery_reference):

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
function gallery_schema()
{
        $schema['gallery_reference'] = array(
          'description' => 'Table description',
 
          'fields' => array(
            'gallery_id' => array(
              'type' => 'int',
            ),
            'image_id' => array(
              'type' => 'int',
            ),
            'notice' => array(
              'type' => 'varchar',
              'length' => 255,
            ),
          ),
         'primary key' => array('gallery_id'),
        );
 
      return $schema;
}

Как видно из примера, мы создаем таблицу из трех столбцов (gallery_id, image_id, notice). В качестве первичного ключа мы описываем gallery_id. При инсталляции модуля Друпал автоматически сканирует ваш файл инсталляции, находит описание «схемы» и создает таблицу в базе данных в соответствии с ней.

Если создание подобных описаний для вас представляет большую проблему, то можно воспользоваться специальным модулем schema. После его установки в разделе Structure => Schema =>Inspect вы можете увидеть описание для любой уже существующей таблицы в базе данных.

Также мы должны включить в наш файл инсталляции hook_uninstall(), который будет вызываться при деинсталляции модуля. Задачи этой функции удалить весь контент, связанный с нашим модулем (ноды, типы контента), и, конечно же, таблицы в базе данных.

1
2
3
4
5
6
7
8
9
function gallery_uninstall()
{
 //удаляем ноды
...
 //удаляем типы контента
...
//удаляем таблицу
drupal_uninstall_schema('gallery');
}




Другие посты

Категория: Drupal

Комментарии (2)

 

  1. Alersandr:

    Здравствуйте!

    Помогите разобраться. Создаю модуль в sites/all/module/mymodule
    состоящий из mymodule.info mymodule.install mymodule.module
    в mymodule.install пишу:
    array(
    ‘id’ => array(‘type’ => ‘serial’, ‘not null’ => TRUE),
    ‘country’ => array(‘type’ => ‘varchar’, ‘length’ => 255, ‘not null’ => TRUE)
    ),
    ‘primary key’ => array(‘id’),
    );
    return $schema;
    }
    function mymodule_uninstall()
    {
    drupal_uninstall_schema(‘my_table’);
    }

    Но после включения модуля таблица не создается. Что я делаю не так?

  2. admin:

    Описание таблицы у вас включено в hook_schema() ? (hook нужно заменить на имя вашего модуля).
    Описание таблицы было добавлено после того, как включали-выключали модуль? (возможно, стоит почистить кэш).

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