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
没有nullable
为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; }
编辑 :解决。 请注意,这是错误的 (注意双引号):
@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标识数据库中的列。 因此,你可以使用“正常”的属性,如可空或唯一!