1

3つのテーブルを結合するために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" }}

......つまり、列エイリアスを使用します。

なぜこれが起こるのか誰かが知っていますか?ありがとう。

4

1 に答える 1

1

ここではエイリアスを指定しなかったため、selectはSELECT ph.photo_id, pr.product_id、なしASのようなものに変換され、期待どおりに返さphoto_idproduct_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ドキュメントの詳細 。

于 2011-06-10T23:41:38.203 に答える