Doctrine 2 不能在 manyToOne 关系中使用 nullable=false?

Posted

技术标签:

【中文标题】Doctrine 2 不能在 manyToOne 关系中使用 nullable=false?【英文标题】:Doctrine 2 can't use nullable=false in manyToOne relation? 【发布时间】:2012-03-29 06:50:33 【问题描述】:

一个User 有一个与之关联的Package。许多用户可以参考同一个包。如果没有定义 PackageUser 就不能存在。 User 应该拥有该关系。关系是双向的,因此Package 中有零个或多个用户。

这些要求导致 UserOneToMany 在 Doctrine 2 中的 Package 关系的 ManyToOne 关系。但是 user 表(即外键)中的 package_id 允许 null 值。我试过设置nullable=false 但是命令:

 php app/console doctrine:generate:entities DL --path="src" --no-backup

表示关系ManyToOne 没有属性nullable我错过了什么?

class User


    /**
     * @ORM\Id
     * @ORM\Column(type="integer")
     * @ORM\GeneratedValue(strategy="AUTO")
     */
    private $id;

    /**
     * @ORM\ManyToOne(targetEntity="Package", inversedBy="users")
     */
    private $package;



class Package


    /**
     * @ORM\Id
     * @ORM\Column(type="integer")
     * @ORM\GeneratedValue(strategy="AUTO")
     */
    private $id;

    /**
     * @ORM\OneToMany(targetEntity="User", mappedBy="package")
     */
    private $users;


【问题讨论】:

【参考方案1】:

只有

@ORM\JoinColumn(nullable=false)

必填

【讨论】:

【参考方案2】:

在您的 ManyToOne 关系上使用 JoinColumn 注释:

/**
 * @ORM\ManyToOne(targetEntity="Package", inversedBy="users")
 * @ORM\JoinColumn(name="package_id", referencedColumnName="id", nullable=false)
 */
private $package;

ManyToOne 本身不能为空,因为它与特定列无关。另一方面,JoinColumn 标识数据库中的列。因此,您可以使用“普通”属性,例如可为空或唯一!

【讨论】:

谢谢,我已经尝试过了,但不幸的是,package_id 列仍被标记为 Null - 是的,默认值 - NULL。非常感谢任何帮助。 没关系,双引号完全破坏了事情。那就是nullable="false"是错的! 您是否尝试完全删除数据库并创建新数据库?我刚刚查看了我的数据库(使用与上述相同的 JoinColumn 注释),它被标记为 NotNull! 谢谢你,我一直想知道为什么我不能让它 @ORM\Column(nullable=true) 让我的多线程可以为空! 如果您配置了正确的选项,但您仍然看到数据库列的值错误,请记住清除实体管理器的元数据缓存。在 Symfony 上,您可以使用 console doctrine:cache:clear-metadata 命令

以上是关于Doctrine 2 不能在 manyToOne 关系中使用 nullable=false?的主要内容,如果未能解决你的问题,请参考以下文章

Doctrine2 Mapping:2 个字段映射到一个字段(ManyToOne)

Doctrine ManyToOne 关系 - 在“设置”时自动删除

Doctrine ORM self ManyToOne 由于重复条目而无法插入

使用 Doctrine ORM ManyToOne 关系在相反方向获取实体

Doctrine symfony使用OneToMany删除实体 - ManyToOne关系

Doctrine 中的 OneToMany 和 ManyToOne 关系 - 奇怪的映射错误