Тип даты и времени в схеме Drupal 7 - PullRequest
5 голосов
/ 17 января 2012

Я пишу новый модуль Drupal 7 (Drupal 7.10, Date 7.x-2.0-rc1 установлен, Schema 7.x-1.0-beta3 установлен) я определил таблицу в mymodule.install:

$schema['museums_tickets']= array(
    'fields' => array(
        'nid' => array(
        'type' => 'int',
        'unsigned' => TRUE,
        'not null' => TRUE,
    ),
    'day' => array(
        'type' => 'datetime', 
        'mysql_type' => 'DATETIME',
        'not null' => TRUE,
    ),
    'tickets' => array(
        'type' => 'int',
        'unsigned' => TRUE,
        'not null' => TRUE,
        ),
    'ticket_code' => array(
            'type' => 'varchar',
            'length' => 32,
            'not null' => TRUE, 
            'default' => '',
        ),
    ),
    'primary key' => array('nid', 'day','ticket_code'),
);

но я получаю следующие ошибки:

Field museums_tickets.day: no Schema type for mysql type datetime.
museums_tickets.day: no type for Schema type datetime.
Field museums_tickets.day: no Schema type for type datetime. 

То же самое относится, если я использую

'type' => 'datetime:normal',

Я хотел бы знать, как решить эту проблему. Я не хочу хранить даты как отметку времени, так как другой человек написал много кода, и, очевидно, я не хочу переписывать все. Я уже посмотрел на ошибка пользовательской схемы drupal 7 datetime , но ответ не работает. Может быть, я делаю что-то не так, но я не понимаю, что.

Заранее спасибо.

Ответы [ 3 ]

16 голосов
/ 28 декабря 2012

Если вы посмотрите на схему модуля Date, вы найдете что-то вроде

'day' => array(
    'type' => 'datetime',
    'mysql_type' => 'datetime',
)

На самом деле ответ Клайва был тот, который я выбрал первым, но позже у меня возникли проблемы с модулем Views.

Эта реализация модуля Date спасет мой день

9 голосов
/ 17 января 2012

Для меня работает следующее (Drupal 7.10):

'day' => array(
  'mysql_type' => 'DATETIME',
  'not null' => TRUE,
)

(обратите внимание на клавишу mysql_type вместо type)

Из Схема документов :

Если вам нужно использовать тип записи, не включенный в официально поддерживаемый список типов выше, вы можете указать тип для каждого бэкэнда базы данных.В этом случае вы можете не указывать параметр типа

datetime, который не является допустимым универсальным типом в Drupal 7, поэтому если оставить клавишу type, это всегда вызовет ошибку.

0 голосов
/ 07 февраля 2018

В модуле «Дата взноса» есть:

function date_field_schema($field) {
  $db_columns = array();
  switch ($field['type']) {
    case 'datestamp':
      $db_columns['value'] = array(
        'type' => 'int',
        'not null' => FALSE,
        'sortable' => TRUE,
        'views' => TRUE,
      );
      break;

    case 'datetime':
      $db_columns['value'] = array(
        'type' => 'datetime',
        'mysql_type' => 'datetime',
        'pgsql_type' => 'timestamp without time zone',
        'sqlite_type' => 'varchar',
        'sqlsrv_type' => 'smalldatetime',
        'not null' => FALSE,
        'sortable' => TRUE,
        'views' => TRUE,
      );
      break;

    default:
      $db_columns['value'] = array(
        'type' => 'varchar',
        'length' => 20,
        'not null' => FALSE,
        'sortable' => TRUE,
        'views' => TRUE,
      );
      break;
  }
...