Доктрина 2 однонаправленное отношение один к одному игнорирует существующий указанный уникальный ключ - PullRequest
0 голосов
/ 08 октября 2018

У нас есть две таблицы в базе данных 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 игнорирует существующий и аннотированный уникальный ключ для этого поля.Мы уже пытались использовать индекс и уникальный ключ по отдельности, два уникальных ключа одновременно, не добавляем аннотацию для уникального ключа - ничего не помогает.Любые идеи, где вина?

...