Doctrine & ManyToOne 外键问题

Doctrine & ManyToOne Foreign key issue

我试图在 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();
}

我刚刚按照 Doctrine 映射文档创建了这些代码行。

我用 doctrine:schema:create command line, 创建了架构,当我尝试验证它时,它说:

[ERROR] The database schema is not in sync with the current mapping file.

所以我尝试了 doctrine:schema:update --dump-sql 以查看问题的原因:

ALTER TABLE user CHANGE language_id language_id INT DEFAULT NULL;

可能是什么问题,我很困惑?

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

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