我在导航模型中定义了一个执行查询的函数,我想知道是否有更多“Zendy”生成/执行查询的方法。我正在使用的查询是Bill Karwin在another thread here上提出的用于设置任意记录顺序的查询。我尝试使用预准备语句,但引用了SIGN()函数中的值。
我正在使用MySQL的PDO适配器。
/**
*
*/
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 :(得分:4)
您可以使用Zend_Db_Select
和/或Zend_Db_Expr
,但如果它的工作原理是这样,请不要更改它。实际上不需要使用任何ZF组件只是因为它们存在或者使您的代码更加 Zendy 。使用它们来解决特定问题。
请记住,每次抽象都会使代码速度慢一些。可能不多,但也可能没有必要。我可以从我自己的经验中说出我们屈服于尽可能多地使用ZF组件的项目,即使我们可以做到没有更简单。没有得到回报,我们发现自己后来重构了很多。