2017-05-12 5 views
0

を期待何をしていない、クエリが通過してくれ例えば、一致するエンティティの数を与える:オルタナティブ() - 私はEntityRepository.phpファイルにクエリを作っ

100 

私の新しい目標がありますプロパティfeedback.appointmentState.uid = 4を持つすべてのエンティティを除外します。

と、私はこの次の制約に置くとき:

$query->equals('feedback.appointmentState.uid', 4) 

それは私

0 

を与える今、私は理解していない部分くる - を私はその部分を変更する場合:

$query->logicalNot($query->equals('feedback.appointmentState.uid', 4)) 

私は、

90 

このフィルタは、フィルタに一致するエンティティがないため、100を出力する必要があるため、この方法ではうまくいきませんが、これをどのようにして実現できますか?明確にするため ここに私のコード例(もちろん、私は同時に両方のコメントの部分のコメントを外していなかった)

public function countByCompany($company) { 
    $query = $this->createQuery(); 

    $constraints[] = $query->equals('deleted', 0); 
    $constraints[] = $query->equals('hidden', 0); 
    $constraints[] = $query->equals('socialworker.company', $company); 

    $total = $query->matching($query->logicalAnd($constraints))->count(); 
// $total is 30 

//  $constraints[] = $query->equals('feedback.appointmentState.uid', 4); 
//  $totalCancelled = $query->matching($query->logicalAnd($constraints))->count(); 
// $totalCancelled is 0 

//  $constraints[] = $query->logicalNot($query->equals('feedback.appointmentState.uid', 4)); 
//  $totalWithoutCancelled = $query->matching($query->logicalAnd($constraints))->count(); 
// $totalWithoutCancelled is 15 

    return false; 
} 
+0

私は本能を信じて、90は正しい結果であり、何か他のことを期待する必要があると考えなければなりません。 –

答えて

0

は私が

public function countByCompany($company) { 
    $query = $this->createQuery(); 

    $totalWithoutCancelled = $query->matching(
     $query->logicalAnd(
      $query->equals('deleted', 0), 
      $query->equals('hidden', 0), 
      $query->equals('socialworker.company', $company), 
      $query->logicalNot(
       $query->equals('feedback.appointmentState.uid', 4) 
      ) 
     ) 
    )->count(); 

    return false; 
} 

にあなたの最後のクエリを溶解は私を試してみてください。これは同じですか?

public function countByCompany($company) { 
    $query = $this->createQuery(); 

    $total = $query->matching(
     $query->logicalAnd(
      $query->equals('deleted', 0), 
      $query->equals('hidden', 0), 
      $query->equals('socialworker.company', $company) 
     ), 
     $query->logicalNot(
      $query->equals('feedback.appointmentState.uid', 4) 
     ) 
    )->count(); 

    return false; 
} 
+0

後で 'matching'関数を使用しています。コードを追加しました。ソリューションをどのように適用するのか分かりません。コードに実装できますか? –

+0

私は私の答えを変えました。 –

関連する問題