亲一亲Doctrine查询之2:QueryBuilder

Doctrine我们介绍了DQL,他很像SQL也最终把语句转换成了SQL。但,你可不写DQL。我们可以用QueryBuilder去替换DQL:他是一个对象,可以我们构建DQL字符串。QueryBuilder是我在Doctrine中最喜欢的一部分。

创建Query Builder

让我们注释掉$dql。去创建一个QueryBuilder,创建一个$qb变量并从repository里调用$this->createQueryBuilder()。传入cat作为参数 – 他是Category类的别名。

?构建查询

现在,让我们看一些精彩的!QueryBuilder有很多的方法例如:andWhere, leftJoin?和?addOrderBy。让我们用用它们:使用addOrderBy方法,并传入cat.name作为第一个参数,DESC作为第二个参数:

这段和我们之前构建的DQL是一样的。因为我们的createQueryBuilder()函数在CategoryRepository内,所以我们的函数自动把Category实体配置进来,当然cat是他的别名。

从这里获取一个Query对象,要使用 $qb->getQuery():

不错哈哈。

还记得我们之前是怎样输出查询语句的吗?我们也可以打印DQL。让我们来看看我们努力的工作转化的DQL。

刷新~ 看看是不是很亲切:

这与我们之前写的DQL是相同的。所以,Query Builder仅仅是一个帮助我们写DQL好的方法,并且我喜欢他是因为我写一个方法他会替我自动完成语句构建,并且可以帮助你很容易的组合查询,就像一个复杂的JOIN,他可以传入多个查询条件。这个我以后再告诉你。

移除之前的die,刷新:

他看起来很不错。你想知道更多关于QueryBuilder的使用你可以继续看,或者你可以使用编辑器去看他的不同方法。但是我建议你继续看。

 

发表评论