Zend Database Adapter - Сложный запрос MySQL - PullRequest
1 голос
/ 08 апреля 2010

Я определил функцию в моей модели навигации, которая выполняет запрос, и мне было интересно, есть ли более "Zendy" способ генерации / выполнения запроса.Используемый мной запрос был предложен Биллом Карвином на другим потоком здесь для установки произвольного порядка записи.Я попытался использовать подготовленный оператор, но значения в функции SIGN () были заключены в кавычки.

Я использую адаптер PDO для MySQL.

/**
 *
 */
public function setPosition($parentId, $oldPosition, $newPosition)
{
    $parentId = intval($parentId);
    $oldPosition = intval($oldPosition);
    $newPosition = intval($newPosition);
    $this->getAdapter()->query("
        UPDATE `navigation`
        SET `position` = CASE `position`
            WHEN $oldPosition THEN $newPosition
            ELSE `position` + SIGN($oldPosition - $newPosition)
            END
        WHERE `parent_id` = $parentId
        AND `position` BETWEEN LEAST($oldPosition, $newPosition)
            AND GREATEST($oldPosition, $newPosition)
    ");
    return $this;
}

1 Ответ

4 голосов
/ 08 апреля 2010

Вы можете использовать Zend_Db_Select и / или Zend_Db_Expr, , но , если оно работает как есть, не меняйте его. Нет необходимости использовать какие-либо компоненты ZF только потому, что они существуют, или чтобы сделать ваш код более Zendy . Используйте их для решения конкретной проблемы.

Имейте в виду, что каждая абстракция будет замедлять ваш код на несколько градусов. Может быть, не так много, но также не может быть необходимым. Я могу судить по собственному опыту проекта, в котором мы использовали как можно больше компонентов ZF, даже если бы мы могли обойтись без и проще. Не окупились, и мы обнаружили, что рефакторинг многих из них позже.

...