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.

¿Fue útil?

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.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top