提问者:小点点

原则&多对一外键问题


我试图在language实体和user实体之间创建关系,一种语言有许多用户,但一个用户只有一种语言。 所以我创建了如下关系:

在user.php中:

/**
 * @ORM\ManyToOne(targetEntity="Language", inversedBy="users")
 * @ORM\JoinColumn(name="language_id", referencedColumnName="id")
 */
private $language;

在language.php中

/**
 * @var ArrayCollection
 * @ORM\OneToMany(targetEntity="User", mappedBy="language")
 */
private $users;

public function __construct()
{
    $this->users = new ArrayCollection();
}

我只是按照理论映射文档创建了这些代码行。

我已经用doctory:schema:create command line,创建了模式,当我尝试验证它时,它显示:

[错误]数据库架构与当前映射文件不同步。

所以我尝试了一个原则:schema:update-dump-sql,看看问题的原因是什么:

ALTER TABLE user CHANGE language_id language_id INT DEFAULT NULL;

有什么问题,因为我很困惑?


共1个答案

匿名用户

默认情况下,ManyToOne关系可为空。 “转储SQL”显示此关系在您的数据库中当前不可为空。 我不知道它是否必须这样做,但要使它不可为空,您必须更新语言属性上的用户实体映射,如下所示:

/**
 * @ORM\ManyToOne(targetEntity="Language", inversedBy="users")
 * @ORM\JoinColumn(nullable=false, name="language_id", referencedColumnName="id")
 */
private $language;