hook_schema erstellt keine Datenbanktabelle

11

Die folgende Funktion ist in process_login.install als Teil eines benutzerdefinierten Moduls namens process_login enthalten. Das Modul funktioniert, wenn ich die Datenbanktabelle manuell erstellt habe, aber natürlich möchte ich, dass die Tabelle bei der Installation automatisch erstellt wird.

Die Funktion selbst generiert bei der Installation des Moduls keinen Schemafehler. Es wird jedoch auch nicht die Datenbanktabelle process_login_register in der Drupal 7 MySQL-Datenbank erstellt.

Es gibt keine anderen Fehler, die ich sehen kann, oder Probleme, die von Site Report gemeldet wurden.

Ich habe es vollständig entfernt und mehrfach neu installiert. Ich habe das Internet ausgiebig durchsucht und zwei Bücher konsultiert, die ich über die Drupal-Entwicklung habe. Ich kann mit dieser Funktion nichts falsches sehen (siehe unten).

HINWEIS: Ich habe auch versucht, 'id' als seriell zu definieren, erhalte jedoch das gleiche Ergebnis (dh es wurde keine Tabelle erstellt).

Ich habe keine Ideen mehr. Weiß jemand, warum diese Funktion nicht funktioniert?

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;
}
user8109
quelle
Welche Drupal-Version verwenden Sie?
googletorp
3
Haben Sie das Modul seit dem Schreiben der Funktion tatsächlich deinstalliert und neu installiert (nicht nur deaktiviert und wieder aktiviert)?
Clive
Drupal 6 erfordert den Aufruf von drupal_install_schema () in hook_install. In Drupal 7 wird empfohlen, es nicht explizit aufzurufen.
Shoaib Nawaz
Antworten zu oben: Drupal 7. Ja. Ich verwende Drupal 7, rufe also nicht drupal_install_schema () auf.
user8109
1
@ user8109 Aktivieren / Deaktivieren und Installieren / Deinstallieren sind zwei völlig verschiedene Dinge in Modulen. Durch Aktivieren eines Moduls (Überprüfen auf der Modulseite und Drücken von "Senden") wird nur ein Modul aktiviert und aufgerufen hook_enable(). Die Installation eines Moduls kann nur erfolgen, nachdem es deinstalliert wurde (über die Registerkarte "Deinstallieren" oder "Entwickeln / Neuinstallieren"). Danach werden alle vom Modul erstellten Tabellen gelöscht. Wenn Sie dann das Modul installieren, hook_install()wird es wie erwartet ausgeführt
Clive

Antworten:

21

Verwenden Sie drush dre -y [module]diese Option, um das Modul zu deaktivieren, zu deinstallieren und anschließend wieder zu aktivieren. Das -yFlag macht es noch schneller, ohne dass Sie y drücken und dreimal eingeben müssen.

bloke_zero
quelle
16

Nur wenn Sie ein Modul deinstallieren und anschließend erneut installieren, werden die verwendeten und deklarierten Datenbanktabellen hook_schema()neu erstellt.

Um ein Modul zu deinstallieren, müssen Sie:

  • Deaktivieren Sie das Kontrollkästchen für das Modul

    Bildschirmfoto

  • Klicken Sie auf Konfiguration speichern

    Bildschirmfoto

  • Klicken Sie auf die Registerkarte: Deinstallieren_

  • Klicken Sie auf das Kontrollkästchen links neben dem Modulnamen
  • Klicken Sie auf die Schaltfläche Deinstallieren

    Bildschirmfoto

  • Auf der nächsten Seite, bestätigen Sie das Modul durch Klicken auf die deinstallieren möchten Deinstallieren Schaltfläche

    Bildschirmfoto

Wenn Sie Drush installiert haben, können Sie alternativ die folgenden Befehle verwenden.

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

Ersetzen Sie $moduledurch den Kurznamen des Moduls, zwischen den Spitzen und ohne die Erweiterung .module.

Sie haben das Modul deaktiviert und anschließend wieder aktiviert. Selbst wenn Sie das Verzeichnis mit dem Modul gelöscht haben, müssen Sie Drupal nur deaktivieren und dann wieder aktivieren.

kiamlaluno
quelle
Ist es möglich, dies mit drupal_install_schema und drupal_uninstall_schema zu tun .... drupal.org/node/876250
Hitesh