【问题标题】:Doctrine 2 can't use nullable=false in manyToOne relation?Doctrine 2 不能在 manyToOne 关系中使用 nullable=false?
【发布时间】: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;

}

【问题讨论】:

    标签: symfony doctrine doctrine-orm


    【解决方案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 命令
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2012-07-11
      • 2011-03-20
      • 1970-01-01
      • 2021-09-24
      • 1970-01-01
      • 2021-04-16
      • 1970-01-01
      相关资源
      最近更新 更多