2013-10-17 43 views
0

不幸的是,我創建一個名爲order字段名稱表。字段名稱'訂單'與Zend_Db_table_Abstract與MySQL衝突?

有沒有辦法更改查詢生成器來確保字段名在`(單引號的)包裹

我的查詢如下:

   $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 

感謝

回答

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類型的對象。

所以你沒有做什麼特別的存在。

+0

謝謝。首先,您需要獲取默認適配器:'$ DB = ::的Zend_Db_Table getDefaultAdapter();'和'用戶DB- $> quoteIdentifier( '訂單')'如使用選擇讓'無法識別的方法 'quoteIdentifier()'' – surfer190

+0

@StevieG謝謝,修復了我的答案。 – ThisSuitIsBlackNot