在尝试了许多其他 stackoverflow 问题/答案的语法和不同建议之后,我终于找到了正确的小代码添加组合,以便在我的数据库表中自动“创建”和“更新”列。
在我的 hook_schema() 函数中:
$schema['table'] = array(
'fields' => array(
'created' => array(
'mysql_type' => 'datetime',
'not null ' => TRUE,
'default' => format_date(time(), 'custom', 'Y-m-d 00:00:00'),
),
'updated' => array(
'mysql_type' => 'timestamp',
'not null' => TRUE,
),
),
//other parts of the schema (indexes, keys...)
);
在我的 hook_install() 函数中:
//Automatically set created datetime for current timestamp upon insert
$query = db_query('
CREATE TRIGGER triggername BEFORE INSERT ON tablename FOR EACH ROW BEGIN SET
NEW.created=NOW(); END
');
//Automatically update 'updated' to current timestamp whenever a row is changed
$query = db_query('
ALTER TABLE tablename
MODIFY updated TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP
');
“触发器名称”是您想要命名触发器的任何名称。'tablename' 是您在 hook_schema() 中建立的表的名称,其中包含已创建和更新的列。
希望这对某人有用。几周前我在研究这个问题时,没有人在 drupal 中做这件事的帖子,而且很难弄清楚如何使不同的建议适应 drupal 框架。这是我想出的最好的解决方案。如果您有另一个您认为更好的帖子,请继续发布!