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()または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()メソッドでは、

列名は、括弧が含まれているか、 type のオブジェクトでない限り、識別子として引用されますZend_Db_Expr

そこで特別なことをする必要はありません。

于 2013-10-17T16:03:33.090 に答える