我有一个User实体和一个Usecase实体。这两个实体由ManyToMany关联关联,但此关联还包含另一个属性,称为“环境”。为了实现这种关系,我还有一个名为UserUsecase的实体,它具有与User的ManyToOne关系,与Usecase的ManyToOne关系和额外的字段“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;
}
所以我在User类中尝试了这个:
public function filterUsecases($usecase_id){
$criteria = Criteria::create();
$criteria->where(Criteria::expr()->eq('usecase', $usecase_id));
return $this->userUsecases->matching($criteria);
}
对我来说有意义的是,即使UserUsecase类的字段用例是Usecase类型的对象,它也应解析为其id,并且当id匹配时等式将保持。这似乎不起作用,我找不到如何实现这种过滤。是不是可以这样做?我找到了一篇似乎完全符合我要求的相关文章,但这不符合我的情况。 Here是文章!难道我做错了什么?
提前致谢!
答案 0 :(得分:1)
除非每个用户有很多用例(数千),否则我建议:
public function filterUsecases(Usecase $useCase){
$criteria = Criteria::create();
$criteria->where(Criteria::expr()->eq('usecase', $useCase));
return $this->userUsecases->matching($criteria);
}
然后:
$user->filterUsecases($useCase);
或传递参考
$user->filterUsecases($em->getReference(Usecase::class, $id));