Запретить экспорт внешнего ключа для определенного отношения - PullRequest
0 голосов
/ 28 июля 2011

Я ищу способ запретить доктрине экспортировать внешние ключи для конкретных отношений.Например:

Item:
  connection: doctrine
  #attributes:
  #  export: tables
  columns:
    store_id: integer(4)
    shelf_id: integer(4)
  relations:
    Store:
      local: store_id
      foreign: id
      foreignAlias: Items
    Shelf:
      local: shelf_id
      foreign: id
      foreignAlias: Items

Shelf:
  connection: doctrine
  columns:
    name: string(255)

Store:
  connection: store
  columns:
    name: string(255)

Здесь, если я построю эту схему, доктрина сгенерирует 2 внешних ключа для таблицы элементов:

ALTER TABLE item ADD CONSTRAINT item_store_id_store_id FOREIGN KEY (store_id) REFERENCES store(id);
ALTER TABLE item ADD CONSTRAINT item_shelf_id_shelf_id FOREIGN KEY (shelf_id) REFERENCES shelf(id);

Если вы раскомментируете раздел «атрибуты», доктрина победитт создать.Где, как мне нужно только item_shelf_id_shelf_id ограничение.Причина, по которой я этого хочу, заключается в том, что таблицы Item и Shelf находятся в одной базе данных, а Store - в другой базе данных - внешний ключ для него просто не будет применяться.

1 Ответ

0 голосов
/ 28 июля 2011

Предполагая, что вы используете MySQL, этот поток сообщает, что внешние ключи поддерживаются между базами данных: http://forums.mysql.com/read.php?22,150829,200251#msg-200251 Таким образом, проблема, скорее всего, заключается в том, что сгенерированный sql не содержит имя db.SQL встроен в Doctrine_Export::getForeignKeyBaseDeclaration, который содержит следующие строки:

        if ( ! isset($definition['foreignTable'])) {
            throw new Doctrine_Export_Exception('Foreign reference table missing from definition.');
        }

Поэтому добавление ключа foreignTable, содержащего имя вашей базы данных, в вашем schema.yml может помочь, если база данных находится на том же сервере..

...