Zend framework 从Zend_Db_table_Select获取表别名

Zend framework 从Zend_Db_table_Select获取表别名,zend-framework,zend-db-select,aliases,Zend Framework,Zend Db Select,Aliases,我正在为我的Zend Framework库开发一个活动记录模式(类似于RoR/Cake)。我的问题是:如何确定select对象是否正在为表使用别名 $select->from(array("c" => "categories")); vs. $select->from("categories"); 我将其传递给一个“fetch”函数,该函数添加了额外的连接和其他功能,以自动获取行关系……我想添加一些自定义sql;“c.id”或“categories.id”取决于用户如何使用

我正在为我的Zend Framework库开发一个活动记录模式(类似于RoR/Cake)。我的问题是:如何确定select对象是否正在为表使用别名

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

$select->from("categories");
我将其传递给一个“fetch”函数,该函数添加了额外的连接和其他功能,以自动获取行关系……我想添加一些自定义sql;“c.id”或“categories.id”取决于用户如何使用“from”方法

我知道我可以用

$parts = $select->getPart(Zend_Db_Select::FROM); 
以数组形式从数据中获取,并且表名或别名似乎位于所述数组的“插槽”0中。表名或别名是否始终位于插槽0中?i、 e.我能否可靠地使用:

$tableNameOrAlias = $parts[0];

抱歉,如果这是令人费解的,但希望您能帮助!:)

从逻辑上讲,我认为它应该是这样工作的。为了安全起见,使用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>';

因此,您需要将其引用为
$part[“c”]

嗯,这很好,但我的问题是,我不知道用户是否会传递一个带有别名的表或只是表名的select对象,因此我不能像$part[“c”]那样引用它。也许我可以通过使用php的键($array)来获取[c]?很好,是的!我想这会有所进展$零件=数组(“c”=>数组(“表名”=>“类别”);回声键(部件);给我化名。只需要在部件之间循环,然后抓住钥匙并使用它们。谢谢你的帮助!只是一个提示,这里你称之为“槽”的正确名称是索引。所以数组[0]是索引0,数组['c']是索引'c'。
Array
(
    [c] => Array
        (
            [joinType] => inner join
            [schema] => 
            [tableName] => categories
            [joinCondition] => 
        )

)