2017-11-24 14 views
1

これは(一見非常に単純な)問題です。私はDoctrineエンティティを持っています。Planです。 PlanにはFeaturevalueプロパティ)が関連付けられており、これらはFeatureTypesに関連付けられています。Doctrine:関連する値でエンティティをフィルタリングします

FeatureType IDのリストとこれらの値の可能な値がある場合、すべてのPlanエンティティをフィルタリングしたいと思います。

私の実体はかなりこのようなものです:

Plan 
- id 
- features (One-to-Many) 

Feature 
- id 
- plan (Many-to-One; column would be plan_id) 
- featureType (Many-to-One; column would be featureType_id) 
- value 

FeatureType 
- id 

私が何を意味するか、この次のとおりです。このような配列があります:キーはFeatureType IDで

[ 
    1 => [ 
     '1 month', 
     '3 months', 
     '6 months', 
    ], 
    2 => [ 
     'Prepaid', 
     'On Demand', 
    ] 
] 

、ネストされた配列でありますvalue sを探しています。上記の配列にFeatureTypeごとにFeatureが関連付けられているPlanがあります。このFeaturevalueも上記の配列に含まれています。

唯一の解決策は、単純にすべてのプランを取得し、その後でPHPでフィルタリングすることです。私はそのアプローチが本当に好きではありません。 Doctrineで何とかこれを直接行うことは可能ですか?

+0

あなたのエンティティを表示してください。 –

+0

@StephanVierkantそれに応じて私の質問が更新されました。 – drweissbrot

答えて

0

[OK]をクリックすると、回答が見つかりました(これはまだ私が望むほど清潔ではありませんが)。

私は今、配列($features)をループ条件INNERは、すべてのパラメータに登録しよ追加している:

$i = 0; 

foreach ($features as $feature => $values) { 
    $qb->innerJoin('plan.features', "feature_{$i}", 'WITH', "feature_{$i}.featureType = :featureType_{$i} AND feature_{$i}.value IN (:values_{$i})") 
     ->setParameter("featureType_{$i}", $feature) 
     ->setParameter("values_{$i}", $values); 

    $i++; 
} 
関連する問題