zend query left framework php mysql zend-framework zend-framework2 predicate

php - query - Zend Framework 2 Db: hacer una parte de la consulta negativa usando objetos Predicate



zend framework sql query (2)

Es más como -

''a'' != 1 AND ''b'' IS NOT NULL AND ''c'' NOT LIKE ''foo''

Pruebe estos como individuales where condiciones.

P.ej:

$where = new Where(); $where->notEqualTo(''a'', 1); $where->isNotNull(''b''); $where->literal(''c NOT LIKE ?'', array(''foo''));

¿Cómo se puede negar una parte de la consulta con Zend Framework 2? Estoy tratando de hacer el equivalente Zend/Db de esta parte dinámica de la consulta MySQL:

NOT (`a` = 1 AND `b`IS NULL AND `c` LIKE ''foo'')

Ahora mismo tengo las tres partes de consulta como objetos Predicate (Operator, IsNull and Like objects) objetos (Operator, IsNull and Like objects) . ¿Cómo puedo negar estos y ponerlos en el lugar?

¿Es posible convertir un objeto Predicate (like an Operator or IsNull object) en una cadena Sql?


La dosis de Zend no tiene una solución original, escribí una clase para hacer esto.

/** * Created by PhpStorm. * User: Exlord ([email protected]) * Date: 6/19/14 * Time: 11:44 AM */ namespace System/DB/Sql/Predicate; use Zend/Db/Sql/Predicate/PredicateInterface; class Not implements PredicateInterface { /** * @var string */ protected $specification = ''NOT (%1$s)''; protected $expression; public function __construct($expression = null) { $this->expression = $expression; } /** * @param null $expression */ public function setExpression($expression) { $this->expression = $expression; } /** * @return null */ public function getExpression() { return $this->expression; } /** * @param string $specification * @return self */ public function setSpecification($specification) { $this->specification = $specification; return $this; } /** * @return string */ public function getSpecification() { return $this->specification; } /** * @return array */ public function getExpressionData() { return array( array($this->specification, array($this->expression), array(self::TYPE_VALUE)) ); } }

uso:

$where = new Where(); $where->notIn(''id'', array(1, 2)); $where->equalTo(''name'', ''Foo''); $select = new Select(''tbl_''); $select->where->addPredicate(new Not($where)); var_dump($select->getSqlString());

salida:

string ''SELECT'' tbl _ ". * FROM" tbl_ "WHERE NOT (" id "NOT IN (''1'', ''2'') Y" name "= ''Foo'') ''(longitud = 81)