it-swarm.com.de

current_timestamp im Datumsfeld

Wie kann ich current_timestamp oder now for date field in drupal Datenbankschema) hinzufügen?.

        'created' => array(
            'description' => t('Timestamp when the fee schedule was added.'),
            'type' => 'int',
            'not null' => TRUE,
            'unsigned' => TRUE,
        ),
8
Umar

Mit dem Attribut mysql_type Können Sie einen treiberspezifischen Spaltentyp für MySQL 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 jedes Mal aktualisiert wird, wenn der Datensatz aktualisiert wird, entfernen Sie einfach den Teil ON UPDATE CURRENT_TIMESTAMP Der Abfrage.

6
Clive

Ich gehe davon aus, dass Sie sich auf MySQL beziehen. Die Funktion, die Sie direkt aus den Dokumenten betrachten möchten, ist 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 auf diesen Beitrag gestoßen angegeben, dass die Unterstützung für Zeitstempel für Drupal 8 gelten sollte, 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 es gibt, aber ich würde nicht darauf wetten, dass dies über die D7-Schema-API funktioniert.

UPDATE:

Schauen Sie sich eigentlich die Post an. Der Patch unterstützt den Zeitstempel in D7. Ein großes Lob an drupalshrek Für das Teilen mit uns.

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.

1
stefgosselin

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
0
webdevfreak