Проблемы с внешними ключами в схеме Drupal 7 - PullRequest
3 голосов
/ 19 ноября 2010

У меня проблема со схемой 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-бета 3 ..Как идея: возможно, она еще не реализована, я не вижу ее в таблице node (пример документации указывает на код из установщика).

Спасибо за вашу помощь.

Ответы [ 3 ]

5 голосов
/ 20 ноября 2010

Согласно этой записи , всего несколько месяцев назад функция hook_schema не реализовала создание внешних ключей. Однако он может ссылаться на существующие.

Возможно, в качестве обходного пути можно было бы запустить SQL с добавлением внешнего ключа в hook_init (или одном из других методов API). Извините, похоже, сейчас нет лучшего разрешения.

2 голосов
/ 20 ноября 2010

У вас правильная идея, это еще не реализовано: /

Я понятия не имею, почему они не заявляют об этом явно, но, по-видимому, объявления внешних ключей предназначены только для целей документации (и подготовка к тому, чтобы сделать что-то полезное с ними позже, по крайней мере, можно было бы надеяться на это.' нить.

0 голосов
/ 07 ноября 2016

это очень старый пост, но для справки это может помочь

'foreign keys' => array(
    'series_id' => array(
        'table' => 'series',
        'columns' => array('id' => 'series_id'),
    ),
),
...