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

时间:2012-03-12 20:33:14

标签: symfony doctrine doctrine-orm

User有一个Package与之关联。许多用户可以参考相同的包。如果未定义UserPackage将无法存在。 User应该拥有这种关系。关系是双向的,因此Package中包含零个或多个用户。

这些要求会导致{2}中ManyToOneUser关系OneToManyPackage关系package_id user null这是外键)允许nullable=false值。我已经尝试设置 php app/console doctrine:generate:entities DL --path="src" --no-backup 但命令:

nullable

表示关系ManyToOne没有属性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)

虽然这是正确的:

{{1}}

2 个答案:

答案 0 :(得分:177)

在ManyToOne关系中使用JoinColumn注释:

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

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

答案 1 :(得分:0)

@ORM \ JoinColumn(nullable = false)

是必需的