3

У меня проблема с схемой Drupal 7 для модуля. Есть 4 таблицы, но для образца 2 будет достаточно:Внешние ключи в Drupal 7 ошибка схемы

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 ..As мысль: может быть, это еще не реализовано, я не вижу его в node таблице (документация пример точки для кода из его установщика).

Благодарим за помощь.

+0

Единственное, что я могу думать о том, что, возможно, 'id' не может быть однозначно определены в запросе. Вы можете изменить sermon.id на 'sermon_id' и series.id на' series_id' или что-то в этом роде. Теперь мне любопытно, дайте мне знать, что работает! :) –

+0

zourtney, я попробую вчера (теперь это ночь для меня), но даже если это проблема (это странно, table + fieldname должно быть достаточно, а необработанный SQL-оператор делает эту работу правильной) Мне нужно решение для правильных имен потому что схема предоставляется третьей стороной, и я просто не мог ее изменить при производстве. – lifecoder

+0

Хорошо, забудьте эту идею; Наверное, на самом деле это не реализовано Drupal. Я сделал сообщение ниже. Я помню, как некоторое время назад сталкивался с этим вопросом. Кажется, я неправильно вспомнил «решение». –

ответ

5

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

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

2

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

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

См. this comment and below по (пронумерованному) 'add foreign keys to core' нить.

0

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

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