微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

由 Symfony 的 make:entity 命令创建的 ManyToMany 关系之间的握手

如何解决由 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

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。