Drupal 6模式未安装所有表

Drupal 6模式未安装所有表,drupal,drupal-6,Drupal,Drupal 6,这已经让我疯狂了两天了,我有一个我写的模块,它使用了3个DB表,其中2个安装得很好,这是第三个: $schema['tags_twistal'] = array( 'description' => t('Taxonomy for videos (tags)'), 'fields' => array( 'vid' => array( 'description' => t('The video ID'),

这已经让我疯狂了两天了,我有一个我写的模块,它使用了3个DB表,其中2个安装得很好,这是第三个:

$schema['tags_twistal'] = array(
    'description' => t('Taxonomy for videos (tags)'),
    'fields' => array(
        'vid' => array(
            'description' => t('The video ID'),
            'type' => 'varchar',
            'length' => 255,
            'not null' => TRUE,
        ),
        'tag' => array(
            'description' => t('The tag name'),
            'type' => 'varchar',
            'length' => 255,
            'not null' => TRUE,
        ),
    ),
    'primary key' => array('tag','vid'),
);
我所能想到的是它与我设置的主键有关,我也尝试过:

'unique keys' => array(
    'tag_vid' => array('tag', 'vid'),
),
'primary key' => array('tag_vid'),

有什么想法吗?我要把头发拔出来了

我在Drupal 7中遇到了类似的问题

正确安装的表是那些在hook\u node\u info()返回的数组中有匹配项的表


看起来Drupal不会创建任何未在hook\u node\u info()中引用的表,即使它们在hook\u scheme()中显式枚举。我在任何地方都找不到这个文档,但它符合我的经验,是一个令人头痛的问题。

为什么需要将标记设置为主键?仅将“vid”(我认为与nid相同)设置为主要。“tag_vid”的用法是错误的。vid和nid彼此无关,它不是节点的版本,也不是节点本身,否则我只会使用内置的分类表。一个视频可以有多个标签,但我想确保在更新db时没有两行相同,我也尝试过只使用“唯一键”而忽略“主键”,但它仍然失败。简而言之,您尝试创建的主键太长。很好地解释了它,并且非常完美地匹配了您的示例。这很好,但这不是问题所在,我能够通过在模式挂钩之外执行查询来创建表,没有任何问题。哦,还有一件事,Drupal喜欢隐藏安装期间发生的错误。在hook_install()实现的末尾,敲打一个“exit”语句,卸载并重新安装模块。如果数据库出现错误,它会在那里显示。