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;
...
}
我的项目实体与我的用户实体存在多对多关系。 这会按预期创建连接 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;
...
}