假设我有一张桌子:
$someTable = new Zend_Db_Table ('sometable');
我知道我可以使用表的文字名称构建查询。
$sel = $someTable -> select ()
-> from ('sometable', array ('col_foo', 'col_bar'))
-> where ('some_condition')
并且我可以为表格设置别名。
$sel = $someTable -> select ()
-> from (array ('alias' => 'sometable'), array ('col_foo', 'col_bar'))
-> where ('some_condition')
我也知道我可以在 from() 调用中直接使用 Zend_Db_Table :
$sel = $someTable -> select ()
-> from ($someTable, array ('col_foo', 'col_bar'))
-> where ('some_condition')
但是当我尝试像下面那样对表对象进行别名时,我得到了一个致命错误。
$sel = $someTable -> select ()
-> from (array ('alias' => $someTable), array ('col_foo', 'col_bar'))
-> where ('some_condition')
可捕获的致命错误: Zend_Db_Table 类的对象无法在...中转换为字符串
在我看来,这是有问题的行为,因为 from()、join() 等方法可以处理将 Zend_Db_Table 对象传递给它们,但当您想给它起别名时却不行!
上面的例子有点做作和简化来说明问题。真正的代码是在表之间进行连接,但是随着表对象的传入,我提前不知道它们的名称是什么。当然,我可以使用 info() 来解决上述问题,以获取表名并将它们作为字符串注入,但这意味着额外的代码对我来说看起来很乱。此外,这是 Zend_Db 在没有这种变通方法的情况下应该能够应对的情况。
我正在使用 Zend Framework 1.7.6。并继承 Zend_Db_Table_Abstract 来制作我的表对象。不幸的是,我无权安装 Zend 的升级版本。