ho_schema не створює таблицю бази даних


12

Наступна функція міститься в process_login.install як частина користувацького модуля під назвою process_login. Модуль працює, якщо я вручну створив таблицю бази даних, але, природно, я хотів би, щоб таблиця, створена автоматично при встановленні.

Сама функція не створює помилки схеми при встановленні модуля. Але він також не створює таблицю бази даних process_login_register в базі даних Drupal 7 MySQL.

Немає інших помилок, які я бачу, або проблем, про які повідомляє Звіт про сайт.

Я її видалив повністю і перевстановлював не раз. Я широко шукав в Інтернеті і консультувався з двома книгами про розвиток 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;
}

Яку версію Drupal ви використовуєте?
googletorp

3
Чи справді ви видалили та перевстановили (не лише вимкнено та знову включено) модуль після написання функції?
Клайв

Drupal 6 вимагає зателефонувати drupal_install_schema () під час установки_установки. У Drupal 7 рекомендується не називати це явно.
Shoaib Nawaz

Відповіді на вище: Drupal 7. Так. Я використовую Drupal 7, щоб не викликати drupal_install_schema ().
user8109

1
@ user8109 Увімкнення / відключення та встановлення / видалення - це дві абсолютно різні речі в модулях. Увімкнення модуля (перевірка його на сторінці модулів та натискання кнопки "Надіслати") дозволить лише модуль і викликати hook_enable(). Встановити модуль можна лише після його видалення (використовуючи вкладку "Видалення" або "devel / reinstall"), після чого всі таблиці, створені модулем, видаляються. Після встановлення модуля hook_install()запускається так, як ви очікували
Clive

Відповіді:


22

Використовуйте drush dre -y [module]функцію, яка вимикає, видаляє та повторно вмикає модуль. -yПрапор робить його ще швидше, уникаючи вам потрібно натиснути у і ввести три рази.


16

Тільки якщо ви видалите модуль і згодом його знову встановите, таблиці баз даних, які він використовує та декларує hook_schema(), заново створюються.

Щоб видалити модуль, потрібно:

  • Зніміть прапорець для цього модуля

    скріншот

  • Клацніть на Зберегти конфігурацію

    скріншот

  • Перейдіть на вкладку: Видалити_

  • Установіть прапорець ліворуч від назви модуля
  • Натисніть кнопку Видалити

    скріншот

  • На наступній сторінці підтвердьте, що ви хочете видалити цей модуль, натиснувши кнопку Видалити

    скріншот

Як альтернатива, якщо ви встановили Drush, ви можете використовувати наступні команди.

drush pm-disable $module
drush pm-install $module
drush en $module

Замініть $moduleкороткою назвою модуля між апліками та без розширення .module.

Що ви зробили, це відключити модуль, а потім повторно увімкнути його. Навіть якщо ви видалили каталог, що містить модуль, для Drupal те, що ви зробили, просто вимкнути, а потім повторно увімкнути його.


Чи можна це зробити з допомогою drupal_install_schema і drupal_uninstall_schema .... drupal.org/node/876250
Hitesh
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.