DQL 语句在使用 Zend Framework 和 Doctrine 的应用程序中的位置

Posted

技术标签:

【中文标题】DQL 语句在使用 Zend Framework 和 Doctrine 的应用程序中的位置【英文标题】:Where do DQL statements live in an application that is using Zend Framework and Doctrine 【发布时间】:2010-06-11 23:09:03 【问题描述】:

在使用 Zend Framework 1.10 和 Doctrine 1.2 的应用程序中,如果我们的应用程序构建为具有服务层和网关(又名 Doctrine_Table)层,那么 DQL 语句应该位于何处。

看来我们的可能性包括:

1) 将 DQL 语句放置在服务层中,这在我们的应用程序层次结构中似乎有点太高,无法存储 DQL。

2) 将 DQL 语句放置在每个模型的表/网关中,这似乎有点多余,因为我们还需要通过服务层公开执行 getAllUsers() 等操作的 DQL 语句。

以下哪一个是更可取的设计?我们打算尽可能多地使用服务层,以便其他项目可能会消耗我们应用程序的各个部分。

【问题讨论】:

【参考方案1】:

在我们的项目中,我们将大部分查询放在服务层中,除非根本不需要服务。

还有第三个选项,你没有提到,即将基本查询放在表中,然后将它们具体化到服务中:

// in the service
$q = $table->getSomeQuery();
$q->addWhere(...)
  ->findBySome('name')
  ->execute();
...

【讨论】:

以上是关于DQL 语句在使用 Zend Framework 和 Doctrine 的应用程序中的位置的主要内容,如果未能解决你的问题,请参考以下文章

Zend Framework - 安装旧版本

如何使用Zend Framework 2使用Rest API

在 Zend Framework 中使用 Zend_Db_Table 的 CakePHP 风格的数据库查询结果?

Zend Framework windows8.1下配置zend framework1.12

使用 Zend_Loader 选择不同版本的 Zend Framework 加载及其问题

在 Zend Framework 布局脚本中使用 Dojo BorderContainer