hook_schema nie tworzy tabeli bazy danych


12

Poniższa funkcja znajduje się w pliku log_procesu.install jako część niestandardowego modułu o nazwie log_procesu. Moduł działa, jeśli ręcznie utworzyłem tabelę bazy danych, ale oczywiście chciałbym, aby tabela była tworzona automatycznie podczas instalacji.

Sama funkcja nie generuje błędu schematu podczas instalowania modułu. Ale nie tworzy też tabeli bazy danych rejestr_loginu_rejestr w bazie danych Drupal 7 MySQL.

Nie widzę żadnych innych błędów ani problemów zgłaszanych przez raport witryny.

Usunąłem go całkowicie i wielokrotnie instalowałem. Dokładnie przeszukałem Internet i zapoznałem się z dwiema książkami na temat rozwoju Drupala. Nie widzę nic złego w tej funkcji (wymienionej poniżej).

UWAGA: Próbowałem również zdefiniować „id” jako serial, ale otrzymałem ten sam wynik (tj. Nie utworzono tabeli).

Skończyło mi się pomysły. Czy ktoś wie, dlaczego ta funkcja nie działa?

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;
}

Jakiej wersji Drupal używasz?
googletorp

3
Czy faktycznie odinstalowałeś i ponownie zainstalowałeś moduł (nie tylko wyłączałeś i ponownie włączałeś) od czasu napisania funkcji?
Clive

Drupal 6 wymaga wywołania drupal_install_schema () w hook_install. W Drupal 7 zaleca się, aby nie wywoływać tego jawnie.
Shoaib Nawaz

Odpowiedzi na powyższe: Drupal 7. Tak. Korzystam z Drupal 7, więc nie wywołuję drupal_install_schema ().
user8109

1
@ user8109 Włączanie / wyłączanie i instalowanie / odinstalowywanie to dwie zupełnie różne rzeczy w modułach. Włączenie modułu (sprawdzenie go na stronie modułów i naciśnięcie przycisku „Prześlij”) spowoduje tylko włączenie modułu i wywołanie hook_enable(). Instalowanie modułu można wykonać dopiero po jego odinstalowaniu (za pomocą karty odinstalowywania lub devel / reinstall), po czym wszystkie tabele utworzone przez moduł są usuwane. Po zainstalowaniu modułu hook_install()uruchom go tak, jak można się spodziewać
Clive

Odpowiedzi:


22

Użyj tego, drush dre -y [module]który wyłącza, odinstalowuje, a następnie ponownie włącza moduł. -yFlag sprawia, że nawet szybciej, unikając trzeba nacisnąć y wprowadzić trzy razy.


16

Tylko jeśli odinstalujesz moduł, a następnie ponownie go zainstalujesz, tabele bazy danych, których używa i deklaruje, hook_schema()są tworzone ponownie.

Aby odinstalować moduł, musisz:

  • Odznacz pole wyboru pokazane dla modułu

    zrzut ekranu

  • Kliknij Zapisz konfigurację

    zrzut ekranu

  • Kliknij kartę: Uninstall_

  • Kliknij pole wyboru po lewej stronie nazwy modułu
  • Kliknij przycisk Odinstaluj

    zrzut ekranu

  • Na następnej stronie potwierdź, że chcesz odinstalować ten moduł, klikając przycisk Odinstaluj

    zrzut ekranu

Alternatywnie, jeśli zainstalowałeś Drush, możesz użyć następujących poleceń.

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

Zamień $modulena krótką nazwę modułu, między wierzchołkami i bez rozszerzenia .module.

To, co zrobiłeś, to wyłączenie modułu, a następnie jego ponowne włączenie. Nawet jeśli usunąłeś katalog zawierający moduł, dla Drupala po prostu wyłączasz, a następnie włączasz go ponownie.


Czy jest możliwe to zrobić przy użyciu drupal_install_schema i drupal_uninstall_schema .... drupal.org/node/876250
Hitesh
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.