【问题标题】:Zend Database Adapter - Complex MySQL QueryZend 数据库适配器 - 复杂的 MySQL 查询
【发布时间】:2010-04-07 21:37:56
【问题描述】:

我在我的导航模型中定义了一个执行查询的函数,我想知道是否有更“Zendy”的方式来生成/执行查询。我正在使用的查询是由Bill Karwinanother 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;
}

【问题讨论】:

  • “Zendy”是指使用 Zend 提供的抽象,而不是像上面那样编写直接查询。

标签: php mysql zend-framework pdo zend-db


【解决方案1】:

您可以使用Zend_Db_Select 和/或Zend_Db_Expr但是如果它可以正常工作,请不要更改它。确实没有必要仅仅因为它们存在或使您的代码更Zendy而使用任何 ZF 组件。使用它们来解决特定问题。

请记住,每个抽象都会使您的代码在某种程度上变慢。可能不多,但也可能没有必要。我可以从我自己在一个项目中的经验谈起,在这个项目中,我们屈服于使用尽可能多的 ZF 组件,即使我们可以不用而且更简单。没有得到回报,后来我们发现自己重构了很多。

【讨论】:

  • 是否有您特别遇到性能问题的特定 ZF 组件?
  • @Sonny 是的,与 DateTime 相比,Zend_Date 对我们来说表现不佳,我们现在只使用它来格式化特定语言环境的日期。此外,通常的嫌疑人:通过 __call 接口使用时的 PluginBroker、Zend_Loader 和 ViewHelpers。另一个错误的选择是使用 Zend_Config 处理各种 XML 文件。并不是说它是一个糟糕的组件,而是在我们的案例中 DOM 更合适、更容易。我还发现自己在 Zend_Filter 或 Zend_Validate 上使用 filter_var。只是为了说明这一点:我喜欢 ZF,我认为如果使用得当,它会很棒。
猜你喜欢
  • 2013-08-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-10-18
  • 2012-02-24
  • 1970-01-01
  • 2015-07-28
  • 1970-01-01
相关资源
最近更新 更多