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