Drupal 7架构中的日期时间类型

时间:2012-01-17 14:30:24

标签: php drupal drupal-7

我正在编写一个新的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 custom schema error datetime,但答案不起作用。 也许我做错了什么,但我找不到。

提前谢谢。

3 个答案:

答案 0 :(得分:16)

如果您查看Date模块的架构,您会发现类似

的内容
'day' => array(
    'type' => 'datetime',
    'mysql_type' => 'datetime',
)

实际上Clive的答案是我首先选择的那个,但后来给了我一些Views模块的问题。

Date模块的这种实现节省了我的一天

答案 1 :(得分:9)

以下适用于我(Drupal 7.10):

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

(注意mysql_type而不是 type

来自Schema docs

如果需要使用官方支持的上述类型列表中未包含的记录类型,则可以为每个数据库后端指定一种类型。在这种情况下,您可以省略类型参数

datetime在Drupal 7中不是允许的泛型类型,因此将type键留在那里总会导致错误。

答案 2 :(得分:0)

Date contrib模块具有:

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;
  }