0

不幸的是,我创建了一个名为order.

有没有办法更改查询构建器以确保字段名称包含在`(撇号)中

我的查询如下:

               $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

谢谢

4

1 回答 1

1

我不是专家,但根据文档

没有引用应用于where()ororWhere()方法的表达式。如果您有需要引用的列名,则必须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()方法中,

列名作为标识符被引用,除非它们包含括号或者是 type 的对象Zend_Db_Expr

所以你不必在那里做任何特别的事情。

于 2013-10-17T16:03:33.090 回答