Doctrine & ManyToOne 外键问题

我正在尝试创建Language实体与User实体之间的关系,一种语言有许多用户,但一个用户有一种语言。所以我创建了如下关系:


在用户.php中:


/**

 * @ORM\ManyToOne(targetEntity="Language", inversedBy="users")

 * @ORM\JoinColumn(name="language_id", referencedColumnName="id")

 */

private $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,,当我尝试验证它时,它说:


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


所以我尝试doctrine:schema:update --dump-sql看看问题的原因是什么:


ALTER TABLE user CHANGE language_id language_id INT DEFAULT NULL;

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


长风秋雁
浏览 66回答 1
1回答

犯罪嫌疑人X

默认情况下,ManyToOne 关系可为空。“dump sql”显示该关系当前在您的数据库中不可为空。我不知道是否必须这样做,但要使其不可为空,您必须更新语言属性上的用户实体映射,如下所示:/** * @ORM\ManyToOne(targetEntity="Language", inversedBy="users") * @ORM\JoinColumn(nullable=false, name="language_id", referencedColumnName="id") */private $language;
打开App,查看更多内容
随时随地看视频慕课网APP