首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >信条: QueryBuilder vs createQuery?

信条: QueryBuilder vs createQuery?
EN

Stack Overflow用户
提问于 2010-04-21 05:07:05
回答 5查看 57.2K关注 0票数 73

在Doctrine中,您可以通过两种方式创建DQL:

EntityManager::createQuery

代码语言:javascript
复制
$query = $em->createQuery('SELECT u FROM MyProject\Model\User u WHERE u.id = ?1');

QueryBuilder

代码语言:javascript
复制
$qb->add('select', 'u')
   ->add('from', 'User u')
   ->add('where', 'u.id = ?1')
   ->add('orderBy', 'u.name ASC');

我想知道有什么不同,我应该使用哪一个?

EN

回答 5

Stack Overflow用户

发布于 2010-12-09 08:23:49

  1. DQL更易于阅读,因为它与SQL非常相似。如果您不需要根据一组参数更改查询,这可能是最好的选择。
  2. 查询生成器是一个构造查询的应用程序接口,因此,如果您需要动态构建查询,如迭代一组参数或过滤器,则更容易。您不需要执行任何字符串操作来构建查询,如join、split或其他任何操作。
票数 70
EN

Stack Overflow用户

发布于 2010-12-09 16:34:28

可以说,查询构建器只是创建查询的接口……它应该更易于使用,它不仅有add()方法,还有where()、andWhere()、from()等方法,但最终,它只是组成了您在createQuery()方法中使用的查询。

查询构建器的更高级用法示例:

代码语言:javascript
复制
$em->createQueryBuilder()
            ->from('Project\Entities\Item', 'i')
            ->select("i, e")
            ->join("i.entity", 'e')
            ->where("i.lang = :lang AND e.album = :album")
            ->setParameter('lang', $lang)
            ->setParameter('album', $album);
票数 34
EN

Stack Overflow用户

发布于 2012-08-17 01:07:04

它们有不同的目的:

当您知道完整的查询时,

  • DQL更易于使用。当您必须基于某些条件、循环等构建查询时,
  • 查询构建器更智能。
票数 15
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/2678631

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档