2016-04-12 5 views
0

dqlクエリで問題が発生しました。見つけるためにDQL - 親の国に基づくフィルタエンティティ

、私が持つ1つのリレーションに多くを持っているorganes、その後organesと多くの関係に多くを持っている 詳細、詳細と多くの関係に多くを持っている の規準、の規準と多くの関係に多くとのプロトコルを持っていますアトリエは国との関係が多岐にわたります。

配列に含まれている国やラトを持っていないプロトコルを回復する必要があります。私の問題は、親がnullであり、そうでない場合、エンティティは検証されます。私はSQLで多くの拠点を持っていないので、私は何かを忘れていた可能性があります。お返事を事前に

$queryBuilder->select('p') 
     ->from($this->getClass(), 'p') 
    ->leftJoin('p.criteres', 'c') 
    ->leftJoin('c.details', 'd') 
    ->leftJoin('d.organes', 'o') 
    ->leftJoin('o.atelier', 'a') 
    ->where('a.country IN (' . $this->getUserCountriesFormated() . ') OR a.country IS NULL') 
    ->orderby('p.name', 'ASC'); 

ありがとう:

は、これは私のDQLクエリです。

編集:理由はヌル詳細(ITAが私のcountriesformated配列されていない国)のプルアッププロトコルの例:

schema

+0

- >参加する唯一の国検証済みのプロトコルを返しますが、私も両親のない新鮮作成したプロトコルを必要としています。クエリを逆にすると、これらのプロトコルも取得できません。 – Kupris

答えて

0

あなたのデータモデルは少し狂ったように思わ( NtoN関係が多すぎる)、正しいことを確認してください。 getUserCountriesFormated()メソッドは、カンマ区切りのcountry idの文字列を返します(たとえば、"1,2,3")。 はその後、代わりの

->where('a.country IN (' . $this->getUserCountriesFormated() . ') OR a.country IS NULL') 

試しに使用する:

->leftJoin('a.country', 'n') 
->where('(IDENTITY(n) IN (' . $this->getUserCountriesFormated() . ') OR IDENTITY(n) IS NULL)') 
+0

あなたの応答のThnks、私はあなたのコードを試しましたが、それは私に例外を返します(エラー:無効なPathExpression。SingleValuedAssociationFieldでなければなりません)。私はこれが私の問題を修正するかどうかわからない、また、私は望ましくない行動で自分の投稿を編集する。 – Kupris

+0

すべてのエンティティファイルを投稿する必要があります。小さなものに問題を減らそうとします(あなたの選択は6つのエンティティを通過しません)。また、生成されたSQLを(ログファイルから)ポストする – Miro

関連する問題