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;