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
。许多用户可以参考同一个包。如果没有定义 Package
,User
就不能存在。 User
应该拥有该关系。关系是双向的,因此Package
中有零个或多个用户。
这些要求导致 User
和 OneToMany
在 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 关系在相反方向获取实体