我在使用Zend 1.11.3编写查询时遇到问题。我无法获得名称中包含点的字段。由于我无法编辑表格,所以我试图逃避名称,但没有成功。
我的代码如下:
<?php
class RoomsTable extends Zend_Db_Table_Abstract {
...
function getRecord($id)
{
$fields = array(
'id' => 'id',
...
'attrib.floor' => 'attrib.floor',
...
);
$Select = $this->select()
->from($this->_name, $fields)
->where('id = ?',$id);
$list = $Select->query()->fetchAll();
}
}
?>
我打电话的时候:
$rooms_table = new RoomsTable();
$first_room = $rooms_table->getRecord(1);
我明白了:
Zend_Db_Table_Select_Exception: Select query cannot join with another table
因此,attrib.floor
字段被解释为尝试从另一个表中获取字段,而它是该表中的实际字段名称。
我尝试了以下但没有成功:
'attrib\.floor' => 'attrib\.floor',
'`attrib.floor`' => '`attrib.floor`',
'"attrib.floor"' => '"attrib.floor"',
有人知道怎么逃避这个点,所以Zend允许我进入那个领域吗?
答案 0 :(得分:3)
http://framework.zend.com/issues/browse/ZF-953:
包含点(&#34;。&#34;)字符的标识符会自动分割在点上,并且每个部分都会单独引用。因此,标识符支持&#34; schema&#34;。&#34; table&#34;或&#34;表&#34;。&#34;列&#34;语法。
如果您的数据库设计具有包含点字符的表名或列名,则这应该是非常罕见的情况,不建议这样做。但是你可以使用Zend_Db_Expr解决它并自己引用标识符。
http://framework.zend.com/apidoc/1.9/Zend_Db/Expr/Zend_Db_Expr.html
因此,在这种情况下,编写字段的正确方法是:
'attrib.floor' => new Zend_Db_Expr('`attrib.floor`')