2

Zend Framework ライブラリの Active Record パターン (RoR/Cake に似ています) に取り組んでいます。私の質問は次のとおりです。選択オブジェクトがテーブルのエイリアスを使用しているかどうかを確認するにはどうすればよいですか?

$select->from(array("c" => "categories"));

対。

$select->from("categories");

そして、これを「フェッチ」関数に渡します。これにより、結合が追加され、行の関係が自動的に取得されます...カスタムSQLを追加したいと思います。ユーザーが「from」メソッドをどのように使用したかに基づいて、「c.id」または「categories.id」のいずれか。

私は私が使用できることを知っています

$parts = $select->getPart(Zend_Db_Select::FROM); 

からデータを配列として取得し、テーブル名またはエイリアスがその配列の「スロット」0にあるようです。テーブル名またはエイリアスは常にスロット 0 になりますか? つまり、確実に使用できますか:

$tableNameOrAlias = $parts[0];

これが複雑な場合は申し訳ありませんが、お役に立てば幸いです! :)

4

1 に答える 1

3

論理的には、それが機能するはずだと思います。安全のために、Select()を使用していくつかのダミークエリを作成し、print_rまたはなどを使用してパーツ配列をダンプします。

このテストを実行しました。エイリアスは配列キーであり、ゼロベースの数値配列ではありません。

   $select = $this->db->select()->from(array("c" => "categories","d" => "dummies"));
   $parts = $select->getPart(Zend_Db_Select::FROM);
   echo '<pre>';
   print_r($parts);
   echo '</pre>';

出力:

Array
(
    [c] => Array
        (
            [joinType] => inner join
            [schema] => 
            [tableName] => categories
            [joinCondition] => 
        )

)

したがって、次のように参照する必要があります$part["c"]

于 2009-08-24T21:45:52.783 に答える