Zend DB объединяет результаты - PullRequest
1 голос
/ 11 июня 2011

Я использовал zend_db_select для объединения трех таблиц, и в массиве набора результатов, в то время как я ожидал увидеть имена столбцов с псевдонимами, он возвращает массив с ключами без псевдонимов.

$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();

РЕЗУЛЬТАТ КАК:

array(2) { [0]=> array(3) { ["product_id"]=> string(1) "1" ["photo_id"]=> string(1) "4" }}

Пока я ожидал:

array(2) { [0]=> array(3) { ["pr.product_id"]=> string(1) "1" ["ph.photo_id"]=> string(1) "4" }}

...... то есть с псевдонимами столбцов.

Кто-нибудь знает, почему это происходит ?? спасибо.

1 Ответ

1 голос
/ 11 июня 2011

Вы не указали здесь псевдонимы, поэтому ваш выбор будет преобразован в что-то вроде SELECT ph.photo_id, pr.product_id, без AS, что вернет photo_id и product_id, как и ожидалось.

Вам нужночтобы явно указать ваши псевдонимы, если вам нужны точки в ключах:

$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");

Дополнительная информация о Zend_Db_Select документации .

...