在Symfony2/Doctrine中:在一对一关系中,将外键设置为NOTNULL似乎是不可能的

在Symfony2/Doctrine中:在一对一关系中,将外键设置为NOTNULL似乎是不可能的,symfony,doctrine,one-to-one,notnull,Symfony,Doctrine,One To One,Notnull,在我的图片实体中,我有一个图像属性。(其他属性与alt、style等有关)。我注意到该属性没有设置为null=false。我决定改变这一点,在进行了一次条令模式更新之后,我注意到列image_id仍然设置为null 这让我重新思考我的设计,并将图片实体设置为从图像实体延伸而来。我下一步就试试。在条令中,我通常避免使用与文件相关的实体进行类继承,因为它往往会导致太多问题 不过我想知道。这是来自教义的预期行为吗?到目前为止,我的一对一关系已全部设置为可空。是否不可能使它们不可为空?这是有道理的,因为

在我的图片实体中,我有一个图像属性。(其他属性与alt、style等有关)。我注意到该属性没有设置为null=false。我决定改变这一点,在进行了一次条令模式更新之后,我注意到列image_id仍然设置为null

这让我重新思考我的设计,并将图片实体设置为从图像实体延伸而来。我下一步就试试。在条令中,我通常避免使用与文件相关的实体进行类继承,因为它往往会导致太多问题

不过我想知道。这是来自教义的预期行为吗?到目前为止,我的一对一关系已全部设置为可空。是否不可能使它们不可为空?这是有道理的,因为两个密切相关的实体成为一个实体可能会更好。然而,我认为这种关注应该留给开发者选择。在我的例子中,因为我不愿意在图像实体上使用继承

尽管所有示例都显示可为空的外键,但官方文档并不是真正明确的

代码如下:

/**
     * @var
     *
     * @ORM\OneToOne(targetEntity="AnyRoutes\SiteBundle\Entity\Image", cascade={"persist", "remove"})
     * @@ORM\JoinColumn(name="image_id", referencedColumnName="id", nullable=false)
     */
    private $image;

检查删除@@ORM\中的冗余@是否有帮助

是的,确实有帮助。。。谢谢。我快瞎了!我很惊讶Doctrine允许我在不抛出语法错误消息的情况下更新架构。@user3208611,因为在大多数情况下,@ORM\JoinColumn是可选的,并且具有合理的默认值,因此不需要它。
@@ORM\JoinColumn(name="image_id", referencedColumnName="id", nullable=false)