web-dev-qa-db-fra.com

current_timestamp dans le champ date

Comment puis-je ajouter current_timestamp ou maintenant pour le champ date 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,
        ),
8
Umar

Vous pouvez spécifier un type de colonne spécifique au pilote pour MySQL en utilisant le mysql_type attribut:

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 le ON UPDATE CURRENT_TIMESTAMP partie de la requête.

6
Clive

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

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 message 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 hors de la boîte pour D7. Changez 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.

1
stefgosselin

Voici la solution pour Drupal 8.6.x incase juste si quelqu'un regarde comme je l'étais :)

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

cela équivaut à ...

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