current_timestamp dans le champ date

8

Comment puis-je ajouter current_timestamp ou maintenant pour date feild dans le schéma de base de données drupal.

        'created' => array(
            'description' => t('Timestamp when the fee schedule was added.'),
            'type' => 'int',
            'not null' => TRUE,
            'unsigned' => TRUE,
        ),
Umar
la source
1
J'ai effectué une recherche sur user.module. Drupal enregistre créé comme $ array ['created'] = time ();
niksmac

Réponses:

6

Vous pouvez spécifier un type de colonne spécifique au pilote pour MySQL à l'aide de l' mysql_typeattribut:

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

  return $schema;
}

Ensuite, lors de l'activation de votre module, vous pouvez simplement modifier la colonne pour ajouter le comportement par défaut / à la mise à jour:

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

Je viens de le tester sur Drupal 7 et ça marche un régal.

REMARQUE: si vous ne souhaitez pas que l'horodatage soit mis à jour à chaque mise à jour de l'enregistrement, supprimez simplement la ON UPDATE CURRENT_TIMESTAMPpartie de la requête.

Clive
la source
1

Je suppose que vous faites référence à MySQL, la fonctionnalité que vous souhaitez examiner directement à partir des documents est l' horodatage .

Cela mettrait probablement à jour la table db créée par le schéma vers le type de champ que vous recherchez:

MODIFY COLUMN `created` TIMESTAMP NOT NULL DEFAULT current_timestamp;

Je suis juste tombé sur ce post indiquant que le support d'horodatage devrait être pour Drupal 8, donc je suppose (et je peux me tromper) qu'il n'est probablement pas pris en charge dès le départ pour D7. Modifiez simplement le type en TIMESTAMP dans votre tableau et voyez ce qui donne, mais je ne parierais pas sur ce travail via l'API du schéma D7.

MISE À JOUR:

En fait, regardez dans le post. Le correctif ajoutera la prise en charge de l'horodatage dans D7. Bravo à Drupalshrek pour avoir partagé cela avec nous.

Le schéma de la base de données, une fois corrigé, serait le suivant:

<?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,
?>

Allez voir le post ci-dessus pour le patch, je ne republierai pas ses trucs ici, je ne sais pas si cela serait approprié.

J'espère que cela aide, codage heureux.

stefgosselin
la source
0

Voici la solution pour Drupal 8.6.x au cas où quelqu'un ressemblerait à moi :)

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

cela équivaut à ...

`created` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP
webdevfreak
la source