如何解决由 Symfony 的 make:entity 命令创建的 ManyToMany 关系之间的握手
那么,您能否向我解释一下为什么 Symfony 的命令 make:entity
会为 addProperty
关系生成不同的 ManyToMany
方法?
我花了几分钟试图了解原因,但还没有弄明白。
举例说明:
假设你有这两个类:
- 语言
- 国家
# Now running:
bin/console make:entity Country
# You'll enter in the interactive terminal,just type:
> languages
> ManyToMany
> Language
> yes
...
public function addLanguage(Language $language): self
{
if (!$this->languages->contains($language)) {
$this->languages[] = $language;
}
return $this;
}
...
在 Language
课程中,您将获得:
...
public function addCountry(Country $country): self
{
if (!$this->countries->contains($country)) {
$this->countries[] = $country;
$country->addLanguage($this);
}
return $this;
}
...
我试图理解为什么 Language
有 $country->addLanguage($this);
行而 Country
没有。
解决方法
这是正确答案:
请记住,所有这些拥有与反向的东西都很重要,因为当 Doctrine 保存一个实体时,它只查看关系的拥有方来确定要保存到数据库的内容。因此,如果我们为文章添加标签,Doctrine 会正确保存。但是,如果您将文章添加到标签并保存,Doctrine 将什么也不做。嗯,在实践中,如果你使用 make:entity,那不是真的。为什么?因为生成的代码同步了拥有方。如果您在内部调用 $tag->addArticle()
,则调用 $article->addTag()
来源:https://symfonycasts.com/screencast/doctrine-relations/many-to-many
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。