【问题标题】:ActiveRecord (CDbCriteria) vs QueryBuilder?ActiveRecord (CDbCriteria) vs QueryBuilder?
【发布时间】:2013-01-12 23:25:30
【问题描述】:
我必须制作一些过滤器,例如获取给定部门的人员,我想知道最好的方法。
其中一些需要连接多个表。
有人知道CDbCriteria 和查询生成器之间的主要区别吗?我特别想知道与数据库的兼容性。
我在有关 Query Builder 的 Yii 文档中找到了这个:
它提供了一定程度的数据库抽象,从而简化了向不同数据库平台的迁移。
CDbCriteria 对象是否相同?好点了吗?
【问题讨论】:
标签:
activerecord
yii
phpactiverecord
【解决方案1】:
CDbCriteria 的概念在使用 Yii 的 active record (AR) 抽象时使用(通常一直如此)。 AR 要求您为数据库中的各种表创建 models。
Query builder 访问数据库的方式非常不同;实际上,它是一个结构化包装器,允许您以编程方式构造 SQL 查询,而不仅仅是将其写为字符串(作为额外的好处,它还提供了您提到的一定程度的数据库抽象)。
在典型的应用程序中,几乎不需要使用查询构建器,因为 AR 已经提供了大量功能,并且还提供了相同程度的数据库抽象。
在某些情况下,您可能希望运行一种非常特定类型的查询,这种查询不方便或无法通过 AR 发出。然后你有两个选择:
- 如果查询已修复或几乎已修复,那么您只需通过DAO 发出即可;实际上查询构建器文档中提到“如果您的查询很简单,直接编写 SQL 语句会更容易、更快捷”。
- 如果需要动态构建查询,则查询构建器非常适合这项工作。
如您所见,查询构建器在大多数情况下并不是那么有用。只有当您想编写非常自定义且同时动态构造的查询时,才有意义使用它。
您提到的示例功能可以而且应该使用 AR 来实现。