대안

2017-05-12 3 views
0

가 나는 EntityRepository.php 파일에 쿼리, 쿼리가 통과하고 나에게 예를 들어 일치하는 개체의 수를 제공하게 무엇을 기대하고 있지 속성이 feedback.appointmentState.uid = 4 인 모든 항목을 필터링합니다. 나는이 다음과 같은 제약에 넣어 때대안

가와 :

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

이 지금은 이해하지 못하는 부분을 제공

0 

나에게 준다 - 을 I가 그 부분을 변경하는 경우가 :

$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

내 대답이 바뀌 었습니다. –