ActiveRecord(CDbCriteria)与QueryBuilder?

时间:2013-01-12 23:25:31

标签: activerecord yii phpactiverecord

我必须制作一些过滤器,例如让某些人进入特定部门,我想知道最好的方法。

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

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

我在有关查询构建器的Yii文档中找到了这个:

  

它提供了一定程度的数据库抽象,简化了向不同数据库平台的迁移。

CDbCriteria对象是否相同?它更好吗?

1 个答案:

答案 0 :(得分:4)

在使用Yii的active record(AR)抽象(通常是所有时间)时,使用CDbCriteria的概念。 AR要求您为数据库中的各个表创建了models

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

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

在某些情况下,您可能希望运行一种非常特定类型的查询,这种查询不方便或无法通过AR发出。然后你有两个选择:

  1. 如果查询已修复或几乎已修复,则您只需通过DAO发出;实际上,查询构建器文档提到“如果查询很简单,直接编写SQL语句会更容易,更快”。
  2. 如果需要动态构建查询,那么查询构建器将非常适合该作业。
  3. 正如您所看到的,查询构建器在大多数情况下并不是那么有用。只有当你想要编写非常自定义的并且同时动态构造的查询时才有意义使用它。

    您提到的示例功能可以并且应该使用AR实现。