2016-04-06 18 views
0

ich habe:Lehre NICHT IN Abfrage

$from = new \DateTime($from); 
      $to = new \DateTime($to); 
      $qb = $this->em->createQueryBuilder(); 
      $reservations = $qb 
        ->select('rr.id') 
        ->from('\Model\Reservation', 're') 
        ->join('re.rooms', 'rr') 
        ->where('(re.fromDate < ?1 AND re.toDate <= ?2 AND re.toDate > ?1) OR (re.fromDate >= ?1 AND re.fromDate < ?2)') 
        ->setParameters(array(1 => $from, 2 => $to)) 
        ->getQuery() 
        ->getResult(); 

Und ich habe Ergebnis:

array(2) { [0]=> array(1) { ["id"]=> int(2) } [1]=> array(1) { ["id"]=> int(2) } } 

Ich möchte Abfrage wie SELECT mit Lehre schreiben ... WO NICHT IN erste Abfrage, aber die Abfrage :

$rooms = $qb->select('ro') 
      ->from('\Model\Room', 'ro')     
      ->where($qb->expr()->notIn('ro.id', $reservations)) 
      ->getQuery() 
      ->getResult(); 

geben Sie mir Fehler:

ERROR: Invalid parameter number: number of bound variables does not match number of tokens

Hilf mir bitte.

+0

Was ist '$ reservations' aussieht? –

+0

Feld (2) {[0] => Feld (1) {["id"] => int (2)} [1] => Feld (1) {["id"] => int (2)} }. –

Antwort

1

ändern

->where($qb->expr()->notIn('ro.id', $reservations)) 

zu

->where($qb->expr()->notIn('ro.id', array_column($reservations, 'id'))) 
+0

Immer noch das Gleiche. –

+0

Ok, ich habe das Problem behoben. Ich brauchte einen neuen QueryBuilder für die zweite Abfrage. –