以下功能作为名为process_login的自定义模块的一部分包含在process_login.install中。如果手动创建数据库表,该模块将起作用,但是自然地,我希望在安装时自动创建该表。
该函数本身在安装模块时不会生成架构错误。但是它也没有在Drupal 7 MySQL数据库中创建数据库表process_login_register。
我没有看到其他错误,也没有网站报告报告的问题。
我已将其完全删除并重新安装了无数次。我在网络上进行了广泛搜索,并查阅了两本有关Drupal开发的书。我看不到此功能有什么问题(下面列出)。
注意:我也尝试将'id'定义为序列,但是得到相同的结果(即未创建表)。
我的想法已经用完了。有人知道为什么这个功能不能正常工作吗?
function process_login_schema(){
$schema['process_login_register'] = array(
'description' => 'Register a specific computer with the system.',
'fields' => array(
'id' => array(
'description' => 'Primary identifier.',
'type' => 'int',
'unsigned' => TRUE,
'size' => 'normal',
'not null' => TRUE,
'default' => 0,
),
'ip' => array(
'description' => "The user's IP address at registration.",
'type' => 'varchar',
'length' => 32,
'not null' => TRUE,
'default' => '',
),
'user_agent' => array(
'description' => "The user's browser user agent string at registration.",
'type' => 'varchar',
'length' => 255,
'not null' => TRUE,
'default' => '',
),
),
'primary key' => array('id'),
);
return $schema;
}
您正在使用什么Drupal版本?
—
googletorp
自编写功能以来,您是否实际卸载并重新安装了模块(不仅仅是禁用并重新启用了该模块)?
—
克莱夫(Clive)
Drupal 6需要在hook_install中调用drupal_install_schema()。在Drupal 7中,建议不要显式调用它。
—
Shoaib Nawaz 2012年
上面的答案:Drupal 7.是的。我正在使用Drupal 7,所以不调用drupal_install_schema()。
—
user8109 2012年
@ user8109启用/禁用和安装/卸载是模块中完全不同的两件事。启用模块(在模块页面中选中它,然后按“提交”)将仅启用一个模块,然后调用
—
Clive
hook_enable()
。只有在卸载模块后(使用“卸载”选项卡或devel / reinstall),然后再删除该模块创建的所有表之后,才能安装模块。然后,当您安装模块时,hook_install()
将按预期运行