教义2一对一的单向关系会忽略现有的指定唯一键

时间:2018-10-08 11:40:22

标签: php doctrine-orm

我们在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';

这两个表在 details 中的主键和 user 中的唯一键之间具有一对一的单向关系(但它可以为NULL值)。我们在Symfony 2框架中使用ORM主义2(2.5)。该表的实体:

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;

    //.....
}

因此,当我们运行原则架构验证命令时,它已同步返回错误。架构更新命令提供了向用户表中的detail字段添加一个唯一键的方法-由于某些原因,Doctrine忽略了该字段的现有和带注释的唯一键。我们已经尝试过分别使用索引和唯一键,即两个唯一键,不为唯一键添加注释-没有帮助。任何想法哪里出了问题?

0 个答案:

没有答案