ActiveRecord (CDbCriteria) vs QueryBuilder?



我必须做一些过滤器,比如获取特定部门的人员,我想知道最好的方法是什么。

其中一些将需要多个表的连接。

有人知道CDbCriteria和查询生成器之间的主要区别吗?我特别想知道与数据库的兼容性。

我在Yii关于查询生成器的文档中找到了这个:

它提供了一定程度的DB抽象,从而简化了向不同DB平台的迁移。

对于CDbCriteria对象是相同的吗?这样更好吗?

CDbCriteria的概念在使用Yii的活动记录(AR)抽象时使用(通常是所有时间)。AR要求您已经为数据库中的各种表创建了模型。

查询生成器是一种非常不同的方式来访问数据库;实际上,它是一个结构化包装器,允许您以编程方式构造SQL查询,而不仅仅是将其作为字符串写出来(作为一个额外的好处,它还提供了一定程度的数据库抽象)。

在典型的应用程序中,几乎不需要使用查询生成器,因为AR已经提供了大量的功能,并且它还提供了相同程度的数据库抽象。

在某些情况下,您可能希望运行非常特定类型的查询,但通过AR发出查询不方便或性能不高。

  1. 如果查询是固定的或几乎固定的,那么你可以简单地通过DAO发出它;事实上,查询生成器文档中提到"如果你的查询很简单,直接编写SQL语句会更容易、更快"。
  2. 如果查询需要动态构造,那么查询生成器就非常适合这项工作。

因此,正如您所看到的,查询生成器在大多数时候并不是那么有用。只有当你想编写非常自定义的同时又动态构造的查询时,使用它才有意义。

您提到的示例特性可以而且应该使用AR实现。

最新更新