2017-05-12 55 views
0

我做了一個EntityRepository.php文件的查詢,查詢經過並給我,例如一些匹配的實體:替代logicalNot() - 沒有做什麼預期

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

我稍後使用「匹配」功能。我添加了我的代碼,我不知道如何應用您的解決方案,您是否可以將其實施到我的代碼中? –

+0

我改變了我的答案。 –