zend tutorial framework zend-framework zend-db

zend-framework - zend framework 3 tutorial



Cómo crear la cláusula WHERE IN con Zend_Db_Select (6)

La primera respuesta probablemente funciona en ZF1 pero no funciona en Zend Framework 2:

$data = array(1,3,4); $select->where(''status_id IN(?)'', $data);

En caso de que Zend Framework2 descubriera que debes usar:

$data = array(1,3,4); $select->where(array(''status_id'' => $data));

Resultado:

WHERE `status_id` IN (''1'', ''3'', ''4'')

¡No pude encontrar esto documentado en ningún lado! La documentación de ZF generalmente no es óptima.

Así que estoy tratando de lograr algo como esto:

SELECT * FROM table WHERE status_id IN (1,3,4);

usando Zend_Db_Select ... no puede encontrar cómo hacerlo :( ¿Es posible?


Podemos usar Zend/Db/Sql/Predicate/In con Zend/Db/Sql/Where para hacer un lugar en la consulta dentro de un modelo.

$this->status_ids = array(1,3,4); // select attributes from db by where in $result = $this->select(function (Select $select) { $predicate = new In(); $select->where( $predicate->setValueSet($this->status_ids) ->setIdentifier(''status_id'') ); })->toArray();


aparentemente es súper simple ... estúpido:

$select->where(''status_id IN(1,3,4)'');

:(


también puedes usarlo así:

$data = array(1,3,4); $select->where(''status_id IN(?)'', $data);

no necesitas implosionar array, y es más seguro


$completionNo = implode(",",$data); $db = Zend_Db_Table_Abstract::getDefaultAdapter(); $select = $db->select()->from(array("p"=>PREFIX . "property_master"),array(''id'',''completion_no'',''total_carpet_area''))->where("p.completion_no IN (?)", $completionNo);


This solution works well with zf2 $ids = array(''1'', ''2'', ''3'', ''4'', ''5'', ''6'', ''7'', ''8''); $select->where(array("app_post_id"=> $ids));

o

$ids = array(''1'', ''2'', ''3'', ''4'', ''5'', ''6'', ''7'', ''8''); $sql = new Sql($this->adapter); $select = $sql->select(); $select->from(''app_post_comments''); $select->where(array("app_post_id"=> $ids)); // echo $select->getSqlString($this->adapter->getPlatform()); // exit; $statement = $sql->prepareStatementForSqlObject($select); $result = $statement->execute(); $resultSet = new ResultSet(); $resultSet->initialize($result); $resultSet->buffer()->toArray(); echo ''<pre>''; print_r($resultSet); exit; return $resultSet;