current_timestamp nel campo data


8

Come posso aggiungere current_timestamp o ora per la data feild nello schema del database drupal.

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

1
Ho fatto una ricerca su user.module. Drupal sta salvando creato come $ array ['Created'] = time ();
niksmac,

Risposte:


6

È possibile specificare un tipo di colonna specifico del driver per MySQL utilizzando l' mysql_typeattributo:

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

  return $schema;
}

Quindi, abilitando il tuo modulo, puoi semplicemente modificare la colonna per aggiungere il comportamento predefinito / all'aggiornamento:

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

L'ho appena provato su Drupal 7 e funziona a meraviglia.

NOTA: se non si desidera aggiornare il timestamp ogni volta che si aggiorna il record, rimuovere semplicemente la ON UPDATE CURRENT_TIMESTAMPparte della query.


1

Suppongo che ti riferisci a MySQL, la caratteristica che vuoi esaminare direttamente dai documenti è data e ora .

Questo probabilmente aggiornerebbe la tabella db creata dallo schema al tipo di campo che stai cercando:

MODIFY COLUMN `created` TIMESTAMP NOT NULL DEFAULT current_timestamp;

Mi sono appena imbattuto in questo post affermando che il supporto per il timestamp dovrebbe essere attivo per Drupal 8, quindi presumo (e potrei sbagliarmi) probabilmente non è supportato per D7. Basta cambiare il tipo in TIMESTAMP nel tuo array e vedere cosa dà ma non scommetterei su questo lavoro tramite l'API dello schema D7.

AGGIORNARE:

In realtà, guarda nel post. La patch aggiungerà supporto al timestamp in D7. Grandi complimenti a drupalshrek per averlo condiviso con noi.

Schema del database, una volta patchato sarebbe il seguente:

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

Vai a vedere il post sopra per la patch, non ripubblicerò le sue cose qui, non sono sicuro che farlo sarebbe corretto.

Spero che questo aiuti, buona programmazione.


0

Ecco la soluzione per Drupal 8.6.x nel caso in cui qualcuno stia guardando come ero :)

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

questo equivale a ...

`created` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.