Yii createCommand vs Criteria


Yii createCommand vs Criteria

我到处找了,找不到这个令人费解的问题的答案。

几乎可以用标准做所有事情(尽管它可能看起来很"糟糕"作为代码),就像我可以用createCommand做的那样。

所以我的问题是:是否存在性能差异,或者只有 2 种获得相同结果的方法?

CDbCriteria 和 createCommand 都是在 Yii 框架中创建查询的方法。除此之外,有时您需要直接运行 mysql 查询而不使用这些方式。

使用 CDbCriteria 创建复杂查询非常简单,并且比 createCommand 更好同时需要使用关系运行联接操作。

但是在性能基础上,createCommand 比 CDbCriteria 更好,因为 CDbCriteria 执行一些模式级查询来获取表列,并针对每个表以及每次使用 CDbCriteria 时执行。虽然createCommand直接执行mysql查询,但它不需要运行模式级查询。

当您开始缓存查询时,两者在性能级别上几乎相似。

关于 CDbCriteria 的一个更好的功能是它的关系查询。所以我更喜欢使用 CDbCriteria 和 Let yii 以自己的方式处理查询。

CDbCriteria恰好是某些CDbConnection(一般为DAO)功能的一种封装。例如,在 ActiveRecord 模型中,大多数查询函数(如 find() 和类似函数)使用 CDbCriteria 对象来初始化 CommandBuilder 实例。这样,性能就存在实际差异,因为使用 CDbcriteria 实际上需要一些 php 执行来生成 db 命令。不过,我必须说,这是毫无意义的。参考资料告诉我们:

虽然Yii DAO几乎可以处理任何与数据库相关的任务,但我们很可能会花费90%的时间编写一些执行常见CRUD(创建,读取,更新和删除)操作的SQL语句。当代码与 SQL 语句混合时,维护我们的代码也很困难。为了解决这些问题,我们可以使用活动记录。