Zf2 NICHT IM Ausdruck in Where-Klausel
Ich versuche zu bekommen Ergebnisse aus einer Tabelle, die nicht bereits auf einem anderen Tisch.
Dafür bin ich mit einer Unterabfrage und ein NICHT IN Ausdruck in die where-Klausel. Die normale sql, die funktioniert sieht so aus:
SELECT `products`.* FROM `products` WHERE `products`.`pro_id` **NOT IN** (
SELECT `product_collection`.`pro_id` AS `pro_id` FROM `product_collection` WHERE `coll_id` = '6' ) AND products.pro_id IN (55,56,57,62)
Bin ich mit dem zf2 für das Projekt. Das problem ist, ich weiß nicht, wie zu verwenden NICHT IN Ausdruck in der where-Klausel. Wir können denen->in() für den Ausdruck in die Where-Klausel. für zB.
//$productIds is an array
//$collectionId is an id
$subSelect = $this->getRawSql()->select('product_collection');
$subSelect -> columns(array('pro_id'));
$subSelect -> where(array('coll_id'=>$collectionId));
$select = $this->getRawSql()->select('products');
$select -> **where->in**('products.pro_id', $subSelect)
-> where->in('products.pro_id',$productIds);
aber ich habe keine Ahnung, wie zu verwenden NICHT IM Ausdruck.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Verwenden notIn() magst du mit In().
Siehe : http://framework.zend.com/apidoc/2.1/classes/Zend.Db.Sql.Predicate.NotIn.html
Edit :
Oder diese stattdessen zu verwenden
Fatal error: Call to undefined method Zend\Db\Sql\Where::notIn()
Und ich bin mit zf 2.1.4.Habe ich es herausgefunden, wir couldnot verwenden -> operator für NotIn Prädikat. Ich hatte zum erstellen einer neuen Instanz von NotIn Prädikat und übergeben es an die where-Klausel wie folgt Aussehen, damit es funktioniert.
Dank Fouad für die Hilfe.
oder wie Fouad angedeutet, habe ich versucht unten und es funktionierte auch!.
$delete->where(new NotIn('products.pro_id', $subSelect));
. Stattdessen würden Sie zu tun haben, eine Kombination der Lösungen:$delete->where->addPredicate(new NotIn('products.pro_id', $subSelect));
.