У нас есть две таблицы в базе данных MySQL (это короткие примеры):
CREATE TABLE `user`(
`id` BIGINT(20) NOT NULL AUTO_INCREMENT,
`name` VARCHAR(255) NOT NULL,
`details` BIGINT(20) DEFAULT NULL,
PRIMARY KEY (`id`)
UNIQUE KEY `UNQ_FK_user_details` (`details`)
CONSTRAINT `UNQ_FK_user_details` FOREIGN KEY (`details`) REFERENCES `user_details` (`id`) ON DELETE SET NULL,
) ENGINE=InnoDB AUTO_INCREMENT=26 DEFAULT CHARSET=utf8 COMMENT='User';
CREATE TABLE `details`(
`id` BIGINT(20) NOT NULL AUTO_INCREMENT,
`full_name` TEXT NOT NULL,
`user_data` TEXT DEFAULT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=32 DEFAULT CHARSET=utf8 COMMENT='User detailed data';
Эти две таблицы имеют однонаправленное отношение один к одному между первичным ключом в подробности и уникальнымвведите user (но это может быть значение NULL).Мы используем ORM Doctrine 2 (2.5) в Symfony 2 Framework.Объекты для этих таблиц:
use Doctrine\ORM\Mapping as ORM;
/**
* @ORM\Table(
* name="user",
* uniqueConstraints={
* @ORM\UniqueConstraint(name="UNQ_FK_user_details", columns={"details"})
* }
* )
*/
class User
{
/**
* @var integer $id
*
* @ORM\Column(name="id", type="bigint", nullable=false)
* @ORM\Id
* @ORM\GeneratedValue(strategy="IDENTITY")
*/
private $id;
/**
* @var Details $details
*
* @ORM\OneToOne(targetEntity="Details", cascade={"persist"}, fetch="EAGER")
* @ORM\JoinColumns({
* @ORM\JoinColumn(name="details", referencedColumnName="id", nullable=true, onDelete="SET NULL")
* })
*/
private $details;
//.....
}
class Details
{
/**
* @var integer $id
*
* @ORM\Column(name="id", type="bigint", nullable=false)
* @ORM\Id
* @ORM\GeneratedValue(strategy="IDENTITY")
*/
private $id;
//.....
}
Итак, когда мы запустили команду проверки схемы доктрины, она вернула ошибку в синхронизации.Команда обновления схемы предлагает добавить еще один уникальный ключ в поле сведений в пользовательской таблице - по какой-то причине Doctrine игнорирует существующий и аннотированный уникальный ключ для этого поля.Мы уже пытались использовать индекс и уникальный ключ по отдельности, два уникальных ключа одновременно, не добавляем аннотацию для уникального ключа - ничего не помогает.Любые идеи, где вина?