current_timestamp no campo de data

8

Como posso adicionar current_timestamp ou agora para date feild no esquema do banco de dados drupal.

        'created' => array(
            'description' => t('Timestamp when the fee schedule was added.'),
            'type' => 'int',
            'not null' => TRUE,
            'unsigned' => TRUE,
        ),
Umar
fonte
11
Eu fiz uma pesquisa no user.module. Drupal está salvando criado como $ array ['created'] = time ();
Niksmac 12/04/12

Respostas:

6

Você pode especificar um tipo de coluna específico do driver para o MySQL usando o mysql_typeatributo:

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

  return $schema;
}

Em seguida, ao ativar seu módulo, você pode simplesmente modificar a coluna para adicionar o comportamento padrão / na atualização:

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

Acabei de testar isso no Drupal 7 e funciona bem.

NOTA: Se você não deseja que o carimbo de data e hora seja atualizado toda vez que o registro for atualizado, remova a ON UPDATE CURRENT_TIMESTAMPparte da consulta.

Clive
fonte
1

Suponho que você esteja se referindo ao MySQL, o recurso que você deseja analisar diretamente dos documentos é o registro de data e hora .

Provavelmente, isso atualizaria a tabela db criada pelo esquema para o tipo de campo que você está procurando:

MODIFY COLUMN `created` TIMESTAMP NOT NULL DEFAULT current_timestamp;

Apenas tropecei neste post, afirmando que o suporte ao carimbo de data / hora deveria estar disponível para o Drupal 8, então eu assumo (e eu poderia estar errado) que provavelmente não é suportado fora da caixa para o D7. Basta alterar o tipo para TIMESTAMP na sua matriz e ver o que dá, mas eu não apostaria nisso trabalhando através da API do esquema D7.

ATUALIZAR:

Na verdade, olhe no post. O patch adicionará suporte ao registro de data e hora no D7. Muitos elogios a drupalshrek por compartilhar isso conosco.

Esquema do banco de dados, uma vez corrigido, seria o seguinte:

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

Vá ver o post acima para o patch, não vou repassar as coisas dele aqui, não tenho certeza se isso seria apropriado.

Espero que isso ajude, codificação feliz.

stefgosselin
fonte
0

Aqui está a solução para o Drupal 8.6.x, caso alguém esteja olhando como eu :)

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

isso é equivalente a ...

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