Doctrine не создает внешние ограничения внешних ключей в MySQL

У меня две таблицы, db1.Contact и db2.Recipient. Каждый получатель должен быть контактом, поэтому у меня есть внешний ключ, установленный между двумя таблицами в поле db1.Contact.ContactID.

Я представляю это в Recipient.php со следующей аннотацией:

/** * @ORM\Id * @ORM\ManyToOne(targetEntity="\db1\Contact") * @ORM\JoinColumn(name="ContactID", referencedColumnName="ContactID") **/ private $Contact; 

Для этого мне не нужен код в Contact.php.

Когда я создаю базу данных (используя доктрину orm: schema-tool: create –dump-sql), я вижу, что поле Recipient.ContactID создано и задано индексом. Однако для создания ограничения внешнего ключа не создается и не выполняется запрос. Поэтому, чтобы быть ясным, я не получаю никаких ошибок, но ограничение никогда не генерируется.

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

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

Ваша ассоциация ManyToOne кажется неправильной. Вы должны использовать FQCN сущностей, если ваша кодовая база находится в пространстве имен (или просто имя класса, если сущности обеих сторон находятся в одном каталоге), а не имена таблиц .

Например

 /** * @ORM\Id * @ORM\ManyToOne(targetEntity="YourNamespace\Entities\Contact") * @ORM\JoinColumn(name="ContactID", referencedColumnName="ContactID") **/ private $contact; 

Вы можете больше узнать об ассоциации.

Doctrine не поддерживает Cross-DB FK:

В Доктрине объединение данных по базам данных технически не поддерживается конструктивной функцией, но вы можете заставить ее работать, обмакнув Doctrine немного.

Источник: http://www.doctrine-project.org/2009/06/19/cross-database-joins.html