Doctrine ManyToMany 清理

Doctrine ManyToMany cleanup

我的项目实体与我的用户实体存在多对多关系。 这会按预期创建连接 table。

如果我删除一个项目实体,我希望连接 table 中带有项目实体 ID 的所有行也被删除,但这并没有发生。

我将如何实现这种行为? 我已经试过了 orphanremoval=true

这是我的项目实体的相关部分:

/**
 * @ORM\Entity(repositoryClass=ProjectRepository::class)
 */
class Project
{
    ...
    
    /**
     * @ORM\ManyToMany(targetEntity=User::class)
     */
    private $userProjectManagers;

    ...
}

如果我删除用户,也会发生同样的情况。我想我必须使用 mappedBy / inversedBy 在我的用户实体中添加一个字段。

虽然我不确定这是否是不好的做法,因为除了连接 table 行删除之外我不需要该字段。

得到这样的效果:

/**
 * @ORM\Entity(repositoryClass=ProjectRepository::class)
 */
class Project
{
    ...
    
    /**
     * @ORM\ManyToMany(targetEntity=User::class, inversedBy="pmProjects")
     * @ORM\JoinTable(
     *     name="project_user",
     *     joinColumns={
     *          @ORM\JoinColumn(name="user_id", referencedColumnName="id")
     *     },
     *     inverseJoinColumns={
     *          @ORM\JoinColumn(name="project_id", referencedColumnName="id")
     *     }
     * )
     */
    private $userProjectManagers;

    ...
}

/**
 * @ORM\Entity(repositoryClass=UserRepository::class)
 */
class User implements UserInterface
{
    ...

    /**
     * @ORM\ManyToMany(targetEntity=Project::class, mappedBy="userProjectManagers")
     */
    private $pmProjects;
    ...

}