2

我正在为我的 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];

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

4

1 回答 1

3

从逻辑上讲,我认为它应该是这样工作的。为了安全起见,使用 Select() 构建一些虚拟查询并使用print_ror 这样的方式转储部分数组。

我刚刚进行了这个测试,别名是数组键,它不是从零开始的数值数组:

   $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 回答