3

我对模块的 Drupal 7 模式有疑问。有 4 个表,但对于示例 2 就足够了:

function mymodule_schema() {
$schema['series'] = array(
    'fields' => array(
        'id' => array(
            'type' => 'serial',
            'unsigned' => true,
            'not null' => true,
        ),
        'name' => array(
            'type' => 'varchar',
            'length' => 255,
            'not null' => true,
        ),
    ),
    'unique keys' => array(
        'name' => array('name'),
    ),
    'primary key' => array('id'),
);

$schema['sermon'] = array(
    'fields' => array(
        'id' => array(
            'type' => 'serial',
            'unsigned' => true,
            'not null' => true,
        ),
        'title' => array(
            'type' => 'varchar',
            'length' => 255,
            'not null' => true,
        ),
        'series_id' => array(
            'type' => 'int',
        ),
    ),
    'foreign keys' => array(
        'series_id' => array(
            'table' => 'series',
            'columns' => array('series_id' => 'id'),
        ),
    ),
    'primary key' => array('id'),
);
return $schema;
}

此代码创建表但不创建外键。我从 Drupal.org 获得的实施示例:http: //drupal.org/node/146939

Drupal 版本是 7.0-beta 3 .. 想法:也许,它还没有实现,我没有在node表中看到它(文档示例指向它的安装程序的代码)。

感谢您的帮助。

4

3 回答 3

5

根据这篇帖子,就在几个月前,该hook_schema功能还没有实现外键的创建。但是,它可以引用现有的。

也许一种解决方法是在hook_init(或其他 API 方法之一)中运行添加外键的 SQL。抱歉,目前似乎没有更好的解决方案。

于 2010-11-19T21:15:14.027 回答
2

你有正确的想法,这还没有实现:/

我不知道他们为什么不突出说明这一点,但显然,外键声明目前仅用于文档目的(并且准备稍后对它们做一些有用的事情,至少有人希望如此)。

请参阅此评论和下面的(错误命名的)“将外键添加到核心”线程。

于 2010-11-19T21:12:13.943 回答
0

这是一个非常古老的帖子,但作为参考,这可以提供帮助

'foreign keys' => array(
    'series_id' => array(
        'table' => 'series',
        'columns' => array('id' => 'series_id'),
    ),
),
于 2016-11-07T12:36:35.107 回答