我正在编写一个新的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,但答案不起作用。 也许我做错了什么,但我找不到。
提前谢谢。
答案 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;
}