ActiveRecord(CDbCriteria)与QueryBuilder?

ActiveRecord(CDbCriteria)与QueryBuilder?,activerecord,yii,phpactiverecord,Activerecord,Yii,Phpactiverecord,我必须制作一些过滤器,例如获取给定部门的人员,我想知道最好的方法 其中一些需要连接多个表 有人知道CDbCriteria和查询生成器之间的主要区别吗?我特别想知道与数据库的兼容性 我在关于查询生成器的Yii文档中发现了以下内容: 它提供了一定程度的数据库抽象,简化了到不同数据库平台的迁移 CDbCriteria对象是否也一样?更好吗?在处理Yii的(AR)抽象(通常总是这样)时,使用了CDbCriteria的概念。AR要求您已经为数据库中的各种表创建了 一种非常不同的访问数据库的方式;实际上,它

我必须制作一些过滤器,例如获取给定部门的人员,我想知道最好的方法

其中一些需要连接多个表

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

我在关于查询生成器的Yii文档中发现了以下内容:

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


CDbCriteria对象是否也一样?更好吗?

在处理Yii的(AR)抽象(通常总是这样)时,使用了
CDbCriteria
的概念。AR要求您已经为数据库中的各种表创建了

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

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

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

  • 如果查询是固定的或几乎固定的,那么您只需通过发布即可;事实上,QueryBuilder文档提到“如果查询很简单,那么直接编写SQL语句就更容易、更快”
  • 如果需要动态构造查询,那么查询生成器就非常适合该作业
  • 因此,正如您所看到的,查询生成器在大多数情况下并不是那么有用。只有当您想编写非常定制且同时动态构造的查询时,使用它才有意义

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