首页 > 解决方案 > 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没有。

标签: phpsymfonysymfony4php-7

解决方案


这是正确的答案:

请记住,所有这些拥有与反向的东西都很重要,因为当 Doctrine 保存一个实体时,它只查看关系的拥有方来确定要保存到数据库的内容。所以,如果我们给一篇文章添加标签,Doctrine 会正确地保存它。但是,如果您将文章添加到标签并保存,Doctrine 将无能为力。好吧,在实践中,如果你使用 make:entity,那是不正确的。为什么?因为生成的代码会同步拥有方。如果你打电话$tag->addArticle(),在里面,那会打电话$article->addTag()

来源:https ://symfonycasts.com/screencast/doctrine-relations/many-to-many


推荐阅读