php - 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
这些步骤将在类中生成以下代码Country
:
...
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
推荐阅读
- r - 将逻辑向量中的值替换为因子
- assembly - MASM 指令“mov edx,OFFSET 名称”的语法错误
- laravel - Laravel 7:自定义保护身份验证无法按预期工作
- eclipse-che - 不能使用 chectl auth:login 或 server:shutdown
- python - 从 s3 读取一个 csv 文件,不包括一些值
- apache-camel - 基于表达式处理的事务性 Camel 路由标记交换不起作用
- .net - 升级到 .NET 5 后生成服务器上的 MSB3644
- python - 修补时如何引用本地导入-正确的python测试结构
- firebase - Firebase:通过存储在正文中的 ID 更新文档
- amazon-web-services - Terraform 计划在导入 aws 资源后显示差异