Внешние ключи в схеме Drupal 7

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

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


person lifecoder    schedule 19.11.2010    source источник
comment
Единственное, о чем я могу думать, это то, что, возможно, id нельзя однозначно идентифицировать в запросе. Вы можете изменить sermon.id на sermon_id и series.id на series_id или что-то в этом роде. Теперь вам интересно, дайте мне знать, что это работает! :)   -  person Courtney Christensen    schedule 19.11.2010
comment
zourtney, я попробую вчера (для меня сейчас ночь), но даже если это проблема (этого странного, table + fieldname должно быть достаточно, а необработанный SQL-оператор делает эту работу правильно), мне нужно решение для правильных этих имен, потому что схема предоставлено третьей стороной, и я просто не мог изменить его на производстве.   -  person lifecoder    schedule 19.11.2010
comment
Хорошо, забудь эту идею; Думаю, это еще не реализовано в Drupal. Я сделал пост ниже. Я помню, как недавно столкнулся с этой проблемой. Кажется, я забыл решение.   -  person Courtney Christensen    schedule 20.11.2010


Ответы (3)


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

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

person Courtney Christensen    schedule 19.11.2010

Вы правильно поняли, это еще не реализовано: /

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

См. этот комментарий и ниже (неверно названный) 'добавить внешние ключи в основной поток'.

person Henrik Opel    schedule 19.11.2010

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

'foreign keys' => array(
    'series_id' => array(
        'table' => 'series',
        'columns' => array('id' => 'series_id'),
    ),
),
person sona    schedule 07.11.2016