Richtige Methode zum Hinzufügen einer benutzerdefinierten Spalte zur Benutzertabelle?

7

Ich möchte eine Spalte mit dem Namen "aktualisiert" direkt zur Benutzertabelle hinzufügen.

Die Feld-API und Joins sind in diesem Fall aufgrund externer Einschränkungen für mich keine Option.

Wie kann ich das user_schema sicher ändern, um die 'aktualisierte' Spalte in einem benutzerdefinierten Modul hinzuzufügen und sie sicher zu bereinigen, wenn das Modul entfernt wird?

Hier ist das Layout der 'aktualisierten' Spalte basierend auf der Schema-API:

  $field = array(
      'type' => 'int',
      'not null' => TRUE,
      'default' => 0,
      'description' => 'Timestamp for last time user was updated.',
  );

Derzeit funktionieren meine Versuche mit hook_install nicht so, wie ich es für richtig halte.

Citricguy
quelle

Antworten:

5

Es scheint, dass mir hook_schema_alter () gefehlt hat . Dies hat meine Probleme mit drupal_write_record () und Ansichten behoben. Vielen Dank an @Clive für Ihren Kommentar hier .

Überblick über das, was Sie tun müssen:

Aktueller Code:

Hier ist, wie ich das erreicht habe. Der folgende Code gehört in Ihre module.install-Datei.

function hook_install() {
  $field = array(
      'type' => 'int',
      'not null' => TRUE,
      'default' => 0,
      'description' => 'Timestamp for last time user was updated.',
  );
  $index = array(
      'indexes' => array(
          'updated' => array('updated')
      ),
  );
  db_add_field('users', 'updated', $field, $index);
}
function hook_schema_alter(&$schema) {
  $schema['users']['fields']['updated'] = array(
      'type' => 'int',
      'not null' => TRUE,
      'default' => 0,
      'description' => 'Timestamp for last time user was updated.',
  );
}

function hook_uninstall() {
  db_drop_field('users', 'updated');
}
Citricguy
quelle
Ich habe ein leeres mymodule.module erstellt. Und fügte eine mymodule.info hinzu (damit sie in der Modulliste sichtbar ist) und mymodule.install (unter Verwendung des obigen Codes). Alle "hook_" mit "mymodule_" geändert. Um Änderungen zu deinstallieren, müssen Sie die Auswahl des Moduls aufheben, zur Registerkarte Deinstallation wechseln und dies überprüfen. Durch die Deinstallation auf diese Weise werden alle mit diesem Feld verknüpften Daten entfernt.
Sksallaj
Ich könnte mich irren, aber im Allgemeinen möchten Sie bei der Deinstallation eines Moduls alle Spuren entfernen, die das Modul erstellt / hinzugefügt hat.
Citricguy
Ja, aber als ich versucht habe, ein Feld zu aktualisieren, müssen Sie es deinstallieren und erneut installieren, um das Update anzuwenden. Drupal aktualisiert den Code einfach nicht, wenn Änderungen an der Spalte im obigen Code vorgenommen werden. Aus diesem Grund müssen bestimmte Verfahren vor dem Update berücksichtigt werden.
Sksallaj