Zend 框架 - 直接使用 SQL

Posted

技术标签:

【中文标题】Zend 框架 - 直接使用 SQL【英文标题】:Zend Framework - Using SQL directly 【发布时间】:2011-05-03 21:21:45 【问题描述】:

我目前正在使用 Zend 框架从头开始一个项目。我在 php 和 SQL 方面经验丰富,但之前从未使用过 PHP 框架。

关于数据库方面 - 许多教程使用 Zend 类来包装 SQL,这样您就不必编写原始 SQL。例如:

$select = $this->select()
    ->from('MyTable')
    ->order('MyField');

但是,我更喜欢编写 SQL,因为这是我的习惯,并且觉得从灵活性和开发速度两方面来说,这是最好的决定。 (请注意,我实际上是指使用 PDO 的参数化 SQL,而不是完全原始的 SQL)。

我的问题是:

    这样做有什么问题吗?从长远来看,使用 Zend 进行数据库查询的方式会更好吗? Zend 开发人员自己编写 SQL 而不是使用 Zend 样式的方法查询是否很常见?

    在保持 MVC 代码布局的同时,最常见的实现方式是什么?谷歌给了我this link(和类似的),但控制器中有SQL(我不想要)。我仍然想创建自己的应用程序特定模型类,并遵守 MVC 拆分。我可以想到很多地方来实例化 Zend_Db_Adapter_Pdo_mysql 类以在我的模型中使用 - 但是我想知道最常见的设计模式是什么。

【问题讨论】:

【参考方案1】:

我相信你最好的办法是在你的模型中写这个:

public function myQuery ($table, $id) 
    return $this
        ->getDefaultAdapter()
        ->query("SELECT * FROM ? WHERE id = ?",
            array($table,$id)
        )
        ->fetchAll()
    ;

这样做完全没问题。应该没有任何问题。事实上,当您需要使用子查询或其他更复杂的东西时,您会为自己省去很多麻烦。您可以使用 Zend 的函数来完成大部分工作,但说实话:随着查询变得越来越复杂,它们往往变得不可读。

使用 Zend 方式是否更好,取决于您以及您对它们的感觉如何。我更喜欢 Zend 为大部分工作提供的功能,但这只是个人喜好问题,真的。

AFAIK 这两种风格都很常见,虽然我不知道有多少人在使用 Zend(主要来自我工作的公司),所以不要引用我的话 ;)。

【讨论】:

zend_db_select 当您需要分部分构建查询并发送它时加注星标。理想的例子是分页器。它获取 sql 查询并调用 limit(1,10)。在文本 SQL 中,您也可以这样做,但这只是因为您可以附加它。假设您想用 count() 或类似的东西替换列。 ->reset('columns')->columns('count()') :) +1。我也可以推荐看看this。说明有时候,就性能而言,还是直接用SQL比较好。【参考方案2】:

试试下面的链接:http://framework.zend.com/manual/en/zend.db.statement.html

【讨论】:

以上是关于Zend 框架 - 直接使用 SQL的主要内容,如果未能解决你的问题,请参考以下文章

使用 zend 框架安装和使用学说

如何使用 zend 框架创建站点地图?

如何使用 zend from 在 zend 框架 2 中添加自定义属性

使用 Zend 框架阅读 gmail

Zend 框架有代码生成器吗?

如何在Zend框架中使用Zend_auth时设置超时