Symfony Doctrine - 使用 ManyToMany 制作装置

我将 Symfony 4.2 与 Doctrine 一起使用,并且我想用两个实体创建具有 ManyToMany 关系的装置:

  • 组织

  • 项目

但是当我加载装置时,连接表(organization_project)总是空的。所以,我不知道我的人际关系是否良好。

简历:

  • 许多组织有许多项目

  • 许多项目有许多组织

数据库视图

http://img4.mukewang.com/61298b4e00019b9c11510891.jpg

这是我的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;

    }


}


慕莱坞森
浏览 132回答 1
1回答

慕桂英546537

你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;...}
打开App,查看更多内容
随时随地看视频慕课网APP