Следующая функция содержится в process_login.install как часть пользовательского модуля с именем process_login. Модуль работает, если я вручную создал таблицу базы данных, но, естественно, я хотел бы, чтобы таблица создавалась автоматически при установке.
Сама функция не генерирует ошибку схемы при установке модуля. Но он также не создает таблицу базы данных process_login_register в базе данных MySQL Drupal 7.
Других ошибок, которые я вижу, или проблем, о которых сообщает Report Site, нет.
Я удалил это полностью и переустановил много раз. Я много искал в Интернете и ознакомился с двумя моими книгами по разработке Drupal. Я не вижу ничего плохого в этой функции (перечислены ниже).
ПРИМЕЧАНИЕ. Я также попытался определить «id» как последовательный, но получил тот же результат (т.е. таблица не была создана).
У меня кончились идеи. Кто-нибудь знает, почему эта функция не работает?
function process_login_schema(){
$schema['process_login_register'] = array(
'description' => 'Register a specific computer with the system.',
'fields' => array(
'id' => array(
'description' => 'Primary identifier.',
'type' => 'int',
'unsigned' => TRUE,
'size' => 'normal',
'not null' => TRUE,
'default' => 0,
),
'ip' => array(
'description' => "The user's IP address at registration.",
'type' => 'varchar',
'length' => 32,
'not null' => TRUE,
'default' => '',
),
'user_agent' => array(
'description' => "The user's browser user agent string at registration.",
'type' => 'varchar',
'length' => 255,
'not null' => TRUE,
'default' => '',
),
),
'primary key' => array('id'),
);
return $schema;
}
hook_enable()
. Установка модуля может быть выполнена только после его удаления (с помощью вкладки удаления или разработки / переустановки), после чего все таблицы, созданные модулем, будут удалены. Когда вы устанавливаете модуль,hook_install()
он запускается так, как вы ожидаетеОтветы:
Используйте
drush dre -y [module]
который отключает, удаляет и затем повторно включает модуль.-y
Флаг делает его еще быстрее, избегая вам нужно нажать у и ввести три раза.источник
Только если вы деинсталлируете модуль и впоследствии переустановите его, таблицы базы данных, которые он использует и объявляет с помощью
hook_schema()
, воссоздаются.Чтобы удалить модуль, вам необходимо:
Снимите флажок, показанный для модуля
Нажмите на Сохранить конфигурацию
Нажмите на вкладку: Удалить_
Нажмите на кнопку Удалить
На следующей странице подтвердите, что вы хотите удалить этот модуль, нажав кнопку Удалить
В качестве альтернативы, если вы установили Drush, вы можете использовать следующие команды.
Замените
$module
на короткое имя модуля между вершинами и без расширения .module.Что вы сделали, это отключили модуль, а затем снова включили его. Даже если вы удалили каталог, содержащий модуль, для Drupal вы просто отключили, а затем снова включили его.
источник