テーブルがあるとします:
$someTable = new Zend_Db_Table ('sometable');
テーブルのリテラル名を使用してクエリを作成できることはわかっています。
$sel = $someTable -> select ()
-> from ('sometable', array ('col_foo', 'col_bar'))
-> where ('some_condition')
テーブルに別名を付けることができます。
$sel = $someTable -> select ()
-> from (array ('alias' => 'sometable'), array ('col_foo', 'col_bar'))
-> where ('some_condition')
また、from() 呼び出しで Zend_Db_Table を直接使用できることもわかっています。
$sel = $someTable -> select ()
-> from ($someTable, array ('col_foo', 'col_bar'))
-> where ('some_condition')
しかし、以下のようにテーブル オブジェクトをエイリアスしようとすると、致命的なエラーが発生します。
$sel = $someTable -> select ()
-> from (array ('alias' => $someTable), array ('col_foo', 'col_bar'))
-> where ('some_condition')
キャッチ可能な致命的なエラー: クラス Zend_Db_Table のオブジェクトを文字列に変換できませんでした ...
from()、join() などのメソッドは Zend_Db_Table オブジェクトを渡すことはできますが、エイリアスを作成したい場合は処理できないため、これはバグのある動作のように思えます。
上記の例は、問題を説明するために少し工夫して単純化したものです。実際のコードはテーブル間の結合を行っていますが、テーブル オブジェクトが渡されるため、それらの名前が前もってわかりません。もちろん、テーブル名を取得して文字列として挿入するために info() を使用して上記の問題を回避することはできますが、これは余分なコードを意味し、私には面倒に見えます。さらに、これは Zend_Db がそのような回避策なしで対処できる状況です。
Zend Framework 1.7.6 を使用しています。Zend_Db_Table_Abstract をサブクラス化して、テーブル オブジェクトを作成しています。残念ながら、アップグレードされたバージョンの Zend をインストールする権限がありません。