如何在hook_schema()中正确实现mysql date或datetime字段?


13

我已经编写了一个mymodule.install文件,其中包含一个架构定义以在数据库中创建表。该表包含两个数据字段。当用户填写特定内容(例如:指定新闻的特定发布日期)时,这些字段将由用户填充。现在,我没有故意使用“日期”贡献模块,因为出于其他原因,我需要将这两个字段放在数据库表的同一行中。

hook_schema用这种方式定义了两个字段:

'pubblish_date' => array(
    'description' => t('The pubblish date for the single news'),
    'mysql_type' => 'datetime',
    'not null' => FALSE,
  ),
  'unpublish_date' => array(
    'description' => t('The unpublish date for the single news'),
    'mysql_type' => 'datetime',
    'not null' => FALSE,
  ),

该表已在数据库中正确创建,但是我总是收到这些建议消息:

字段news_board.pubblish_date:否mysql类型datetime的模式类型。字段news_board.unpublish_date:否mysql类型datetime的模式类型。news_board.pubblish_date:模式类型:普通没有类型。字段news_board.pubblish_date:类型的架构类型。news_board.unpublish_date:模式类型:普通没有类型。字段news_board.unpublish_date:没有type的架构类型。

对我来说似乎很奇怪,原因是我在文档中使用mysql_type规范来将日期时间格式存储在mysql数据库中。

我知道Drupal本机支持时间戳,如果要存储其他日期格式,则必须根据所使用的数据库使用特定的定义,例如mysql_type或pgsql_type。

在讨论中,我发现在线上有很多人使用mysql_type定义,从我的看到,他们解决了问题,那么为什么它对我不起作用?

非常感谢。

Answers:


12

varchar对于数据库不是 mysql 的情况,您应该提供备用类型()。

'pubblish_date' => array(
  'description' => t('The pubblish date for the single news'),
  'type' => 'varchar',
  'mysql_type' => 'datetime',
  'not null' => FALSE,
),
'unpublish_date' => array(
  'description' => t('The unpublish date for the single news'),
  'type' => 'varchar',
  'mysql_type' => 'datetime',
  'not null' => FALSE,
),

但是,您看到的消息来自“ 模式”模块。此问题已记录为问题#468644

在您的模式中mysql datetime的实现很好。您可以放心地忽略这些消息。我会说这些“建议消息”是由Schema模块中的错误引起的。


嗨,吉斯勒,谢谢你的回答。我只是做了您建议的修改,是的,它在数据库中创建了表,但我仍然有这个地方: •Field news_board.pubblish_date: no Schema type for mysql type datetime. •Field news_board.unpublish_date: no Schema type for mysql type datetime.
Marco

是的,我知道,我已禁用并卸载了它,但是结果是一样的。我使用的核心版本是7.22。我想指定我也安装了模式模块。当我尝试使用此模块检查数据库的架构时,将出现提到的建议。老实说,我没有尝试检查它们在管理界面的其他部分是否也适用。我也想知道我现在是否可以忽略此消息并继续构建模块。我不知道这是否会影响模块本身的功能。
Marco Marco

好的,非常感谢您的宝贵时间。吉斯勒,您节省了我很多!
Marco Marco

0

如果需要使用正式支持的类型列表中未包括的记录类型,则可以为每个数据库后端指定一种类型。

在这种情况下,您可以省略type参数,但是建议您将架构加载到未指定类型的后端上。一种可能的解决方案是使用“文本”类型作为后备。(https://api.drupal.org/api/drupal/core%21lib%21Drupal%21Core%21Database%21database.api.php/group/schemaapi/8.2.x

'submit_date' => array( 'type' => 'varchar', 'mysql_type' => 'datet', )

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.