为了账号安全,请及时绑定邮箱和手机立即绑定

Symfony Doctrine - 使用 ManyToMany 制作装置

Symfony Doctrine - 使用 ManyToMany 制作装置

PHP
慕莱坞森 2021-08-28 09:02:28
我将 Symfony 4.2 与 Doctrine 一起使用,并且我想用两个实体创建具有 ManyToMany 关系的装置:组织项目但是当我加载装置时,连接表(organization_project)总是空的。所以,我不知道我的人际关系是否良好。简历:许多组织有许多项目许多项目有许多组织数据库视图这是我的Organization实体class Organization{    /**     * @ORM\Id()     * @ORM\GeneratedValue()     * @ORM\Column(type="integer")     */    private $id;    ...    /**      * @ORM\ManyToMany(targetEntity="App\Entity\Project", mappedBy="organizations")     */    private $projects;    /**     * @return Collection|Project[]     */    public function getProjects(): Collection    {        return $this->projects;    }    public function addProject(Project $project): self    {        if (!$this->projects->contains($project)) {            $this->projects[] = $project;            $project->addOrganization($this);        }        return $this;    }    public function removeProject(Project $project): self    {        if ($this->projects->contains($project)) {            $this->projects->removeElement($project);            $project->removeOrganization($this);        }        return $this;    }}这是我的Project实体:class Project{    /**     * @ORM\Id()     * @ORM\GeneratedValue()     * @ORM\Column(type="integer")     */    private $id;    ...    /**      * @ORM\ManyToMany(targetEntity="App\Entity\Organization", inversedBy="projects")     */    private $organizations    /**     * @return Collection|Organization[]     */    public function getOrganizations(): Collection    {        return $this->organizations;    }    public function addOrganization(Organization $organization): self    {        if (!$this->organizations->contains($organization)) {            $this->organizations[] = $organization;        }        return $this;    }    public function removeOrganization(Organization $organization): self    {        if ($this->organizations->contains($organization)) {            $this->organizations->removeElement($organization);        }        return $this;    }}
查看完整描述

1 回答

?
慕桂英546537

TA贡献1848条经验 获得超10个赞

你Organization不是关系的拥有方。它不知道加入表(ManyToOne这将是关于谁持有外键)。此外,您没有指定cascading on persist,因此不会保留非拥有方的关联实体。因此,对于您当前的夹具结构,最佳关联方向是这样的。


class Organization

{

...


    /** 

     * @ORM\ManyToMany(targetEntity="App\Entity\Project", inversedBy="organizations", cascade={"persist"})

     * @ORM\JoinTable(name="organization_project") # this one is not necessary

                                                       putting here for reference

     */

    private $projects;

...

]

class Project

{

...

    /** 

     * @ORM\ManyToMany(targetEntity="App\Entity\Organization", mappedBy="projects", cascade={"persist"})

     */

    private $organizations;

...

}


查看完整回答
反对 回复 2021-08-28
  • 1 回答
  • 0 关注
  • 131 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信