current_timestamp в поле даты

8

Как я могу добавить current_timestamp или сейчас для даты поля в схеме базы данных drupal.

        'created' => array(
            'description' => t('Timestamp when the fee schedule was added.'),
            'type' => 'int',
            'not null' => TRUE,
            'unsigned' => TRUE,
        ),
Умар
источник
1
У меня был поиск по user.module. Drupal сохраняет созданное как $ array ['create'] = time ();
Никсмак

Ответы:

6

Вы можете указать специфичный для драйвера тип столбца для MySQL, используя mysql_typeатрибут:

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

  return $schema;
}

Затем, включив модуль, вы можете просто изменить столбец, добавив поведение по умолчанию / при обновлении:

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

Я только что проверил это на Drupal 7, и это работает удовольствие.

ПРИМЕЧАНИЕ. Если вы не хотите, чтобы отметка времени обновлялась при каждом обновлении записи, просто удалите ON UPDATE CURRENT_TIMESTAMPчасть запроса.

Клайв
источник
1

Я предполагаю, что вы имеете в виду MySQL, функция, которую вы хотите изучить прямо из документов - это отметки времени .

Это, вероятно, обновит таблицу БД, созданную схемой, до типа поля, который вы ищете:

MODIFY COLUMN `created` TIMESTAMP NOT NULL DEFAULT current_timestamp;

Просто наткнулся на это сообщение о том, что поддержка метки времени должна быть в Drupal 8, поэтому я предполагаю (и я могу ошибаться), что она, вероятно, не поддерживается из коробки для D7. Просто измените тип на TIMESTAMP в вашем массиве и посмотрите, что дает, но я бы не стал ставить на это работу через API схемы D7.

ОБНОВИТЬ:

Собственно, посмотрите в посте. Патч добавит поддержку метки времени в D7. Большое спасибо друпалшреку за то, что он поделился этим с нами.

Схема базы данных после исправления будет выглядеть следующим образом:

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

Посмотрите пост выше для патча, я не буду репостировать его материал здесь, не уверен, что это будет правильно.

Надеюсь, это поможет, счастливое кодирование.

stefgosselin
источник
0

Вот решение для Drupal 8.6.x просто, если кто-то смотрит, как я был :)

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

это эквивалентно ...

`created` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP
webdevfreak
источник