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

User有一个关联的Package 。 许多用户可以参考相同的包。 没有定义Package User不能存在。 User应该拥有这个关系。 关系是双向的,所以Package中有零个或更多的用户。

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

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

说关系ManyToOne没有nullablenullable的属性。 我错过了什么?

 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; } 

编辑 :解决。 请注意,这是错误的 (注意双引号):

  @ORM\JoinColumn(name="package_id", referencedColumnName="id", nullable="false") 

虽然这是正确的:

 @ORM\JoinColumn(name="package_id", referencedColumnName="id", nullable=false) 

在ManyToOne关系上使用JoinColumn注释:

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

ManyToOne本身不能为空,因为它不涉及特定的列。 另一方面,JoinColumn标识数据库中的列。 因此,你可以使用“正常”的属性,如可空或唯一!