代码之家  ›  专栏  ›  技术社区  ›  typeoneerror

从zend_db_table_select获取表别名

  •  2
  • typeoneerror  · 技术社区  · 16 年前

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

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

    VS

    $select->from("categories");
    

    我把它传递给一个“fetch”函数,这个函数添加了额外的连接,以及什么不能自动获得行关系……我想添加一些自定义SQL;根据用户使用“from”方法的方式,可以是“c.id”或“categories.id”。

    我知道我可以用

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

    以数组形式从数据中获取,表名或别名似乎位于所述数组的“槽”0中。表名或别名是否总是在槽零中?也就是说,我能可靠地使用:

    $tableNameOrAlias = $parts[0];
    

    对不起,如果这是迂回的,但希望你能帮助!:)

    1 回复  |  直到 16 年前
        1
  •  3
  •   karim79    16 年前

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