不幸的是,我使用名为order
的字段名称创建了表。
有没有办法更改查询构建器以确保字段名称包含在`(撇号' s)
中我的查询如下:
$select = $this->select();
$select->order('order DESC');
$select->where('order < ?', $row->menu_id);
$select->where('menu_id = ?', $row->menu_id);
构建器创建:
SELECT `menu_items`.*
FROM `menu_items`
WHERE (order < '1')
AND (menu_id = '1')
ORDER BY `order` DESC LIMIT 1
我想创建
SELECT `menu_items`.*
FROM `menu_items`
WHERE (`order` < '1')
AND (menu_id = '1')
ORDER BY `order` DESC LIMIT 1
感谢
答案 0 :(得分:1)
我不是专家,但根据docs
没有引用适用于
where()
或orWhere()
方法的表达式。如果您有需要引用的列名,则必须在形成条件的字符串时使用quoteIdentifier()
。
在“添加表达式列”部分中有一个使用quoteIdentifier()
的示例:
$select = $db->select()
->from(array('p' => 'products'),
array('origin' =>
'(p.' . $db->quoteIdentifier('from') . ' + 10)')
);
所以你需要做这样的事情:
$db = Zend_Db_Table::getDefaultAdapter();
$select = $this->select();
$select->order('order DESC');
$select->where($db->quoteIdentifier('order') . ' < ?', $row->menu_id);
$select->where('menu_id = ?', $row->menu_id);
请注意,在order()
方法中,
列名称作为标识符引用,除非它们包含括号或是
Zend_Db_Expr
类型的对象。
所以你不必在那里做任何特别的事。