Adaptador de base de datos Zend: consulta compleja de MySQL

He definido una función en mi modelo de navegación que ejecuta una consulta, y me preguntaba si hay una forma más “Zendy” de generar / ejecutar la consulta. La consulta que estoy usando fue propuesta por Bill Karwin en otro hilo aquí para establecer un orden de registro arbitrario. Intenté usar una statement preparada, pero los valores en la función SIGN () fueron citados.

Estoy usando el adaptador PDO para 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; } 

Puede usar Zend_Db_Select y / o Zend_Db_Expr , pero si funciona como es, no lo cambie. Realmente no es necesario usar ninguno de los componentes de ZF solo porque existan o para que su código sea más Zendy . Úselos para resolver un problema específico.

Tenga en cuenta que cada abstracción hará que su código sea un poco más lento. Puede que no sea mucho, pero también podría no ser necesario. Puedo hablar por mi propia experiencia de un proyecto en el que sucumbimos al uso de tantos componentes ZF como sea posible, aunque podríamos haberlo hecho sin y más simple. No valió la pena y nos encontramos refacturando a muchos de ellos más tarde.