current_timestamp en el campo de fecha


8

¿Cómo puedo agregar current_timestamp o ahora para date feild en el esquema de la base de datos drupal.

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

1
Tuve una búsqueda en user.module. Drupal está guardando creado como $ array ['created'] = time ();
niksmac

Respuestas:


6

Puede especificar un tipo de columna específica del controlador para MySQL usando el mysql_typeatributo:

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

  return $schema;
}

Luego, al habilitar su módulo, simplemente puede modificar la columna para agregar el comportamiento predeterminado / al actualizar:

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

Acabo de probar eso en Drupal 7 y funciona de maravilla.

NOTA: Si no desea que la marca de tiempo se actualice cada vez que se actualiza el registro, simplemente elimine la ON UPDATE CURRENT_TIMESTAMPparte de la consulta.


1

Supongo que se está refiriendo a MySQL, la característica que desea examinar directamente desde los documentos es la marca de tiempo .

Esto probablemente actualizaría la tabla db creada por el esquema al tipo de campo que está buscando:

MODIFY COLUMN `created` TIMESTAMP NOT NULL DEFAULT current_timestamp;

Acabo de tropezar con esta publicación que indica que el soporte de marca de tiempo debería estar disponible para Drupal 8, por lo que supongo (y podría estar equivocado) probablemente no sea compatible de fábrica para D7. Simplemente cambie el tipo a TIMESTAMP en su matriz y vea lo que da, pero no apostaría a que esto funcione a través de la API de esquema D7.

ACTUALIZAR:

En realidad, mira en la publicación. El parche agregará soporte a la marca de tiempo en D7. Felicitaciones a drupalshrek por compartir esto con nosotros.

El esquema de la base de datos, una vez parcheado, sería el siguiente:

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

Ve a ver la publicación anterior para el parche, no volveré a publicar sus cosas aquí, no estoy seguro de si hacerlo sería correcto.

Espero que esto ayude, feliz codificación.


0

Aquí está la solución para Drupal 8.6.x por si alguien está mirando como yo :)

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

esto es equivalente a ...

`created` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.