假设我想链接两个表:CHILD(ren) 到他们的 PARENT(s),通过联合表 ROLE 进行多对多关联
在 CHILD 实体的映射中,这是我要放置的内容:
/**
* @var Parent[]|ArrayCollection $parents
* @ORM\ManyToMany(targetEntity=Parent::class, inversedBy="children")
* @ORM\JoinTable(name="ROLE",
* joinColumns={@ORM\JoinColumn(name="children_ID", referencedColumnName="ID")},
* inverseJoinColumns={@ORM\JoinColumn(name="parent_ID", referencedColumnName="ID")}
* )
*/
private $parents;
在父实体中:
/**
* @var Child[] $children
* @ORM\ManyToMany(targetEntity="Child", mappedBy="parents")
*/
private $children;
现在,假设 我有一个区分性的 PARENTTYPE 字段(和一个字符串属性 M/F) 让我知道我是在和父亲还是母亲(甚至是两个父亲或两个母亲)打交道。
我应该如何在 CHILD 实体中编写getMothers() 和 getFathers() 方法?
有没有一种方法可以通过特殊的 Doctrine 关联/注释来过滤 ROLES 集合,或者我应该根据 $role[i]->getParentType 字符串属性“手动”循环这个集合来过滤它?
CHILD实体中的getMothers()和getFathers()方法可以这样写:
public function getMothers(): array
{
return $this->parents->filter(function (Parent $parent) {
return $parent->getType() === ParentType::MOTHER;
});
}
public function getFathers(): array
{
return $this->parents->filter(function (Parent $parent) {
return $parent->getType() === ParentType::FATHER;
});
}