2017-05-04 34 views
2

我有一个用户实体和一个Usecase实体。这2个实体通过ManyToMany关联关联,但该关联还拥有另一个属性,称为“环境”。为了实现这种关系,我还有一个名为UserUsecase的实体,它具有与用户的ManyToOne关系,与Usecase的ManyToOne关系以及额外的“环境”字段。当从数据库中获取用户时,他的用例也被获取,所以用户拥有一个UserChalection类型的对象的ArrayCollection,它表示用户拥有的所有用例。我想要做的是通过usecase_id过滤这个ArrayCollection。该UserUsecase类具有以下结构:Symfony:通过关联的实体ID筛选ArrayCollection

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领域用例是类型的对象用例,它应该解析为它的id,并且当ids匹配时方程将保持不变。尽管如此,这似乎并没有工作,我无法找到如何实现这个过滤。难道不可能这样做吗?我发现了一篇似乎正是我想要的相关文章,但这不适用于我的情况。 Here是文章!难道我做错了什么?

在此先感谢!

回答

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));