it-swarm.com.de

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

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.

7
Citricguy

Es scheint, dass ich vermisst wurde hook_schema_alter (). Dies hat meine Probleme mit drupal_write_record () und Ansichten behoben. Vielen Dank @ Clive für Ihre 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');
}
5
Citricguy