2010-04-07 2 views
1

Я определил функцию в моей модели навигации, которая выполняет запрос, и мне было интересно, есть ли способ генерации/выполнения запроса «Zendy». Запрос, который я использую, был предложен Bill Karwin по адресу another thread here для установки произвольного порядка записи. Я попытался использовать подготовленный оператор, но значения в функции SIGN() были процитированы.Адаптер базы данных Zend - сложный запрос MySQL

Я использую адаптер 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; 
} 
+0

define * Zendy * way please – Gordon

+0

От «Zendy» Я имею в виду использование абстракции, которую предоставляет Zend, а не запись прямого запроса, как указано выше. – Sonny

ответ

4

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

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

+0

Были ли у вас особые компоненты ZF, с которыми у вас особенно были проблемы с производительностью? – Sonny

+1

@ Сонный да, Zend_Date плохо работает для нас по сравнению с DateTime, и мы используем его только для форматирования дат для определенного языка. Кроме того, обычные подозреваемые: PluginBroker, Zend_Loader и ViewHelpers при использовании через интерфейс __call. Другой неправильный выбор - использование Zend_Config для обработки различных файлов XML. Дело не в том, что это плохой компонент, но в нашем случае DOM был более подходящим и легким. Я также обнаружил, что использовал filter_var над Zend_Filter или Zend_Validate. Просто, чтобы сделать это ясно, хотя: мне нравится ZF, и я думаю, что это здорово при правильном использовании. – Gordon

 Смежные вопросы

  • Нет связанных вопросов^_^