【问题标题】:Get table alias from Zend_Db_Table_Select从 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'。

标签: zend-framework zend-db-select aliases


【解决方案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 部分并抓住钥匙并使用它们。感谢您的帮助!
猜你喜欢
  • 1970-01-01
  • 2015-07-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-12-24
  • 2021-10-16
  • 1970-01-01
  • 2011-06-27
相关资源
最近更新 更多