Я делаю свои первые шаги в отношениях сущностей Symfony2.У меня есть установка объекта, у каждого из которых есть один метр и один монитор.
Это означает однонаправленное отношение, которое я определил следующим образом:
/**
*
* @ORM\OneToOne(targetEntity="InfoMeter")
* @ORM\JoinColumn(name="meterid", referencedColumnName="id")
*/
private $meter;
/**
*
* @ORM\OneToOne(targetEntity="InstallationsRtu")
* @ORM\JoinColumn(name="monitorid", referencedColumnName="id")
*/
private $monitor;
Каждый монитор может толькобыть назначенным на одну установку.Каждый счетчик может быть назначен нескольким установкам.
Когда я обновляю свою базу данных (доктрина приложения / консоли: схема: обновление --force), есть два результата.
В случае монитора:
Все идет хорошо, схема обновляется с использованием ключевого имени с префиксом «UNIQ _».
В случае счетчика: я получаю следующую ошибку
PDOException]
SQLSTATE[23000]: Integrity constraint violation: 1062 Duplicate entry '1' for key 'UNIQ_43D26968860BE41D'
Когда я смотрю наСтруктура таблицы после возникновения этой ошибки, я не могу найти упомянутое ограничение, но я нахожу FK_43D26968860BE41D, то есть то же самое, но с префиксом 'FK'.
В таблице установки у меня теперь есть эти перечисленные:
Keyname Type Unique Packed Field Cardinality
PRIMARY BTREE Yes No id 2
UNIQ_43D26968701EC1AB BTREE Yes No monitorid 2
FK_43D26968860BE41D BTREE No No meterid 2
Итак, один говорит «Уникальный = Да», а другой - «Уникальный = Нет».
Чтобы прийти к моему вопросу:
Как я могу решить, является ли ониндекс UNIQ или индекс FK?Я предполагаю, что Doctrine увидела, что в настоящее время каждый monitorid уникален в таблице установки, но что каждый метр встречается несколько раз в таблице установки.
Следовательно, он пошел с UNIQ для первого и FK для последнего.Но могу ли я как-то это контролировать?