Zend DB unión de resultados de resultados
-
26-10-2019 - |
Pregunta
Utilicé Zend_DB_Select para unir 3 tablas, y en la matriz establecida de resultados mientras esperaba ver los nombres de la columna con alias, devuelve una matriz con claves que no tienen alias.
$dbSelect = $db->select()->from(array("pp"=>"products_photos"),array())
->joinInner(array("ph"=>"photos"), "pp.photo_id=ph.photo_id","ph.photo_id")
->joinInner(array('pr'=>'products'),"pr.product_id=pp.product_id","pr.product_id")
->where("pr.product_id=$row->product_id");
$photoJoinRowSet = $db->fetchAll($dbSelect);
var_dump($photoJoinRowSet);die();
Resultado como:
array(2) { [0]=> array(3) { ["product_id"]=> string(1) "1" ["photo_id"]=> string(1) "4" }}
Mientras esperaba:
array(2) { [0]=> array(3) { ["pr.product_id"]=> string(1) "1" ["ph.photo_id"]=> string(1) "4" }}
...... es decir, con alias de columna.
¿¿Alguien sabe por qué pasa esto?? Gracias.
Solución
No especificó ningún alias aquí, por lo que su selección se traducirá en algo como SELECT ph.photo_id, pr.product_id
, sin que AS
, que volverá photo_id
y product_id
como se esperaba.
Debe especificar explícitamente sus alias si desea los puntos en las teclas:
$dbSelect = $db->select()->from(array("pp"=>"products_photos"),array())
->joinInner(array("ph"=>"photos"), "pp.photo_id=ph.photo_id",
array("ph.photo_id" => "ph.photo_id"))
->joinInner(array('pr'=>'products'), "pr.product_id=pp.product_id",
array("pr.product_id" => "pr.product_id"))
->where("pr.product_id=$row->product_id");
Más información sobre el Zend_DB_Select Documentation.