Zend Db Выбрать? Замена в соединении * условие - PullRequest
6 голосов
/ 02 февраля 2010

Не похоже, что в предложении Zend_Db_Select есть какие-либо подстановки параметров.

Очень раздражает, что я не могу просто сделать что-то вроде:

$select->joinLeft('st_line_item','st_line_item.order_id = st_order.id and st_line_item.status = ?')

Так, какова идиоматическая альтернатива, которая работает в беглом интерфейсе? Я мог бы сделать что-то вроде подготовить предложение о соединении снаружи, но это не главное.

Ответы [ 2 ]

10 голосов
/ 02 февраля 2010

Это должно работать:

$select->joinLeft(
    'st_line_item',
    $this->_db->quoteInto(
        'st_line_item.order_id = st_order.id and st_line_item.status = ?', 
        $param
    )
)

По сути, всякий раз, когда вы хотите экранировать переменную, в которой метод Zend_Db_ * не делает этого автоматически, вы просто используете Zend_Db :: quoteInto () для выполнения этой работы.

1 голос
/ 02 февраля 2010

Я всегда так делаю, это не произведение искусства, но оно выполняет свою работу:

$param = $db->quote($param);
$select->joinLeft(
    'st_line_item',
    'st_line_item.order_id = st_order.id and st_line_item.status = ' . $param
);
...