current_timestamp im Datumsfeld

8

Wie kann ich current_timestamp oder now for date feild im Drupal-Datenbankschema hinzufügen?

        'created' => array(
            'description' => t('Timestamp when the fee schedule was added.'),
            'type' => 'int',
            'not null' => TRUE,
            'unsigned' => TRUE,
        ),
Umar
quelle
1
Ich hatte eine Suche auf user.module. Drupal speichert erstellt wie $ array ['created'] = time ();
Niksmac

Antworten:

6

Sie können einen treiberspezifischen Spaltentyp für MySQL mithilfe des folgenden mysql_typeAttributs angeben :

function MYMODULE_schema (){
  $schema['table_name'] = array(
    'fields' => array(
      'created' => array(
        'mysql_type' => 'timestamp',
        'not null' => TRUE
      )
    )
  );

  return $schema;
}

Wenn Sie Ihr Modul aktivieren, können Sie die Spalte einfach ändern, um das Standard- / Aktualisierungsverhalten hinzuzufügen:

function MYMODULE_enable() {
  db_query('
    ALTER TABLE {table_name} 
    MODIFY created TIMESTAMP NOT NULL 
    DEFAULT CURRENT_TIMESTAMP 
    ON UPDATE CURRENT_TIMESTAMP'
  );
}

Ich habe das gerade auf Drupal 7 getestet und es funktioniert ein Vergnügen.

HINWEIS: Wenn Sie nicht möchten, dass der Zeitstempel bei jeder Aktualisierung des Datensatzes aktualisiert wird, entfernen Sie einfach den ON UPDATE CURRENT_TIMESTAMPTeil der Abfrage.

Clive
quelle
1

Ich gehe davon aus, dass Sie sich auf MySQL beziehen. Die Funktion, die Sie direkt aus den Dokumenten betrachten möchten, sind Zeitstempel .

Dies würde wahrscheinlich die vom Schema erstellte DB-Tabelle auf den gesuchten Feldtyp aktualisieren:

MODIFY COLUMN `created` TIMESTAMP NOT NULL DEFAULT current_timestamp;

Ich bin gerade über diesen Beitrag gestolpert und habe festgestellt, dass die Unterstützung für Zeitstempel für Drupal 8 vorgesehen ist. Daher gehe ich davon aus (und ich könnte mich irren), dass dies für D7 wahrscheinlich nicht sofort unterstützt wird. Ändern Sie einfach den Typ in Ihrem Array in TIMESTAMP und sehen Sie, was sich ergibt, aber ich würde nicht darauf wetten, dass dies über die D7-Schema-API funktioniert.

AKTUALISIEREN:

Schauen Sie sich eigentlich die Post an. Der Patch unterstützt den Zeitstempel in D7. Ein großes Lob an drupalshrek, dass er dies mit uns geteilt hat.

Das einmal gepatchte Datenbankschema lautet wie folgt:

<?php
$schema['vchess_moves'] = array(
  'description' => 'Contains the list of moves for each game',
  'fields' => array(
    'timestamp' => array(
    'description' => 'Exact date and time of the move',
    'type' => 'timestamp',
    'not null' => TRUE,
?>

Sehen Sie sich den Beitrag oben für den Patch an. Ich werde seine Sachen hier nicht erneut veröffentlichen. Ich bin mir nicht sicher, ob dies richtig wäre.

Hoffe das hilft, fröhliche Codierung.

stefgosselin
quelle
0

Hier ist die Lösung für Drupal 8.6.x, nur für den Fall, dass jemand so aussieht wie ich :)

'created' => [
  'mysql_type' => 'timestamp',
  'not null' => TRUE,
  'mysql_default' => CURRENT_TIMESTAMP,
 ],

das ist äquivalent zu ...

`created` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP
webdevfreak
quelle