如何根据额外字段从多对多 Doctrine 关联中过滤返回的对象

问题描述 投票:0回答:1

假设我想链接两个表: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 字符串属性“手动”循环这个集合来过滤它?

php doctrine-orm doctrine
1个回答
0
投票

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;
    });
}
© www.soinside.com 2019 - 2024. All rights reserved.