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