我试图在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;
有什么问题,因为我很困惑?
默认情况下,ManyToOne关系可为空。 “转储SQL”显示此关系在您的数据库中当前不可为空。 我不知道它是否必须这样做,但要使它不可为空,您必须更新语言属性上的用户实体映射,如下所示:
/**
* @ORM\ManyToOne(targetEntity="Language", inversedBy="users")
* @ORM\JoinColumn(nullable=false, name="language_id", referencedColumnName="id")
*/
private $language;