Symfony:按关联实体id筛选ArrayCollection

Symfony:按关联实体id筛选ArrayCollection,symfony,filter,doctrine,matching,arraycollection,Symfony,Filter,Doctrine,Matching,Arraycollection,我有一个用户实体和一个用例实体。这两个实体由多个关联关联关联,但该关联还拥有另一个属性,称为“环境”。为了实现这种关系,我还有一个名为UserUsecase的实体,它与User有多通关系,与Usecase有多通关系,还有一个额外的字段“environment”。当从数据库中获取用户时,他的用例也会被获取,因此用户有一个UserUsecase类型的ArrayCollection对象,这些对象表示用户拥有的所有用例。我要做的是按usecase_id筛选此ArrayCollection。UserUse

我有一个用户实体和一个用例实体。这两个实体由多个关联关联关联,但该关联还拥有另一个属性,称为“环境”。为了实现这种关系,我还有一个名为UserUsecase的实体,它与User有多通关系,与Usecase有多通关系,还有一个额外的字段“environment”。当从数据库中获取用户时,他的用例也会被获取,因此用户有一个UserUsecase类型的ArrayCollection对象,这些对象表示用户拥有的所有用例。我要做的是按usecase_id筛选此ArrayCollection。UserUsecase类的结构如下:

class UserUsecase
{
/**
 * @ORM\Id
 * @ORM\Column(type="integer")
 * @ORM\GeneratedValue(strategy="AUTO")
 */
protected $id

/**
 * @ORM\ManyToOne(targetEntity="User", inversedBy="userUsecases")
 * @ORM\JoinColumn(name="user_id", referencedColumnName="id")
 */
protected $user;

/**
 * @ORM\ManyToOne(targetEntity="Usecase", inversedBy="userUsecases")
 * @ORM\JoinColumn(name="usecase_id", referencedColumnName="id")
 */
protected $usecase; 

/**
 * @ORM\Column(type="integer")
 */
protected $environment;
}
所以我在用户类中尝试了以下方法:

public function filterUsecases($usecase_id){
    $criteria = Criteria::create();
    $criteria->where(Criteria::expr()->eq('usecase', $usecase_id));
    return $this->userUsecases->matching($criteria);
}
对我来说,即使类UserUsecase的字段usecase是类型usecase的对象,它也应该解析为它的id,并且当id匹配时,等式将保持不变。然而,这似乎不起作用,我找不到如何实现这种过滤。难道不可能这样做吗?我找到了一篇相关的文章,它似乎完全符合我的要求,但这在我的案例中并不起作用。是文章!我做错什么了吗


提前谢谢

除非每个用户有许多用例(数千),否则我建议:

public function filterUsecases(Usecase $useCase){
    $criteria = Criteria::create();
    $criteria->where(Criteria::expr()->eq('usecase', $useCase));
    return $this->userUsecases->matching($criteria);
}
然后:

或间接引用

$user->filterUsecases($em->getReference(Usecase::class, $id));
$user->filterUsecases($em->getReference(Usecase::class, $id));