2017-05-04 12 views
2

私はUserエンティティとUsecaseエンティティを持っています。この2つのエンティティはManyToManyの関連付けによって関連付けられますが、この関連付けには「環境」という別のプロパティも保持されます。この関係を実装するには、UserとのManyToOne関係、UsecaseとのManyToOne関係、および余分なフィールド「環境」を持つUserUsecaseというエンティティもあります。データベースからユーザーをフェッチするときには、そのユースケースもフェッチされているので、ユーザーはUserUsecase型のオブジェクトのArrayCollectionを持ち、ユーザーが持つすべてのユースケースを表します。私がしたいのは、このArrayCollectionをusecase_idでフィルタリングすることです。クラスUserUsecaseの偶数フィールドのユースケースは、型のオブジェクトであることをsymfony:関連するエンティティIDによるフィルタArrayCollection

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

それは私には理にかなって:だから私はUserクラス内でこれを試してみました

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

:UserUsecaseクラスは、以下の構造を有していますUsecase、それはそのidに解決されるべきであり、idが一致したときに等式が成り立つはずである。それでも動作しないようで、このフィルタリングを実装する方法を見つけることができません。このようにすることはできないのですか?私が欲しいものを正確に行うように見える関連記事を見つけましたが、これは私のケースでは機能しません。 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)); 
を渡します
関連する問題