从 Zend_Db_Table_Select 获取表别名

Posted

技术标签:

【中文标题】从 Zend_Db_Table_Select 获取表别名【英文标题】:Get table alias from Zend_Db_Table_Select 【发布时间】:2010-11-22 10:24:50 【问题描述】:

我正在为我的 Zend Framework 库开发一个 Active Record 模式(类似于 RoR/Cake)。我的问题是:如何确定选择对象是否使用表的别名?

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

对比

$select->from("categories");

然后我将它传递给“获取”函数,该函数添加了额外的连接和诸如此类的自动获取行关系...我想添加一些自定义 sql; “c.id”或“categories.id”取决于用户如何使用“from”方法。

我知道我可以使用

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

将数据作为数组获取,表名或别名似乎在所述数组的“槽”0中。表名或别名是否总是在零槽中?即我可以可靠地使用:

$tableNameOrAlias = $parts[0];

对不起,如果这令人费解,但希望您能提供帮助! :)

【问题讨论】:

只是一个提示,这里你称之为“slot”的正确名称是index。所以array[0]是索引0,array['c']是索引'c'。 【参考方案1】:

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

【讨论】:

嗯,这很好,但我的问题是我不知道用户是否会传递一个带有别名表或只是表名的选择对象,所以我不能像 $part 那样引用它[“C”]。也许我可以通过使用 php 的 key($array) 来获取 [c]? 很好,是的!我认为这正在取得进展。 $parts = array("c" => array("tableName" => "categories"));回显键($parts);给我别名。然后只需要遍历 from 部分并抓住钥匙并使用它们。感谢您的帮助!

以上是关于从 Zend_Db_Table_Select 获取表别名的主要内容,如果未能解决你的问题,请参考以下文章

从 Nodejs 中的 mySQL 获取数据时如何从 Async/await 函数获取返回值

Spring获取资源文件+从File+从InputStream对象获取正文数据

从xlsx文件获取数据时无法从文本单元格获取数值

如何从其他面板从 JTextField 获取输入

获取数据库表蓝图,例如从 redshift 获取“describe table_name”命令,从 python 获取 DB2

从 MongoDB 文档中获取 ID,然后从另一个文档中获取它们的相关值