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

gre*_*emo 108 doctrine symfony doctrine-orm

一个User有一个Package与它相关联.许多用户可以参考相同的包.User没有Package定义就不存在.User应该拥有这种关系.关系是双向的,因此其中Package包含零个或多个用户.

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

 php app/console doctrine:generate:entities DL --path="src" --no-backup
Run Code Online (Sandbox Code Playgroud)

说这种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;

}
Run Code Online (Sandbox Code Playgroud)

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

 @ORM\JoinColumn(name="package_id", referencedColumnName="id", nullable="false")
Run Code Online (Sandbox Code Playgroud)

虽然这是正确的:

@ORM\JoinColumn(name="package_id", referencedColumnName="id", nullable=false)
Run Code Online (Sandbox Code Playgroud)

Sgo*_*kes 186

在ManyToOne关系上使用JoinColumn批注:

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

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

  • 没关系,双引号完全打破了这个问题.那是'nullable ="false"`错了! (5认同)
  • 多亏了这一点,我一直想知道为什么我不能让它成为`@ORM\Column(nullable = true)`以使我的多数可以为空! (5认同)