1

我通常queryRow用来获取单个记录。例如:-

$lastReport =  Yii::app()->db->createCommand(
    'SELECT * FROM report ORDER BY created DESC'
)->queryRow();

我查看了 MySQL 日志以了解使用了哪个查询。

SELECT tbl_report.* FROM report ORDER BY created DESC

似乎 Yii 正在从表中检索所有记录并返回第一条记录。

所以我认为我们应该在使用LIMIT 1时使用queryRow. 例如:-

$lastReport =  Yii::app()->db->createCommand(
    'SELECT * FROM report ORDER BY created DESC LIMIT 1'
)->queryRow();

由于queryRow正在返回“查询结果的第一行(以数组形式)”,Yii 应该自动添加限制。否则用户将使用此查询来获取单个记录,这将导致性能下降。

我的理解是正确的还是我遗漏了什么?

4

1 回答 1

1

Yii 不应该添加limit 1到查询中,因为queryRow它旨在逐行获取结果,例如在 while 中。Yii 对原始 SQL 代码的功能有限,但 Query Builder 可用:

$user = Yii::app()->db->createCommand()
->select('id, username, profile')
->from('tbl_user u')
->join('tbl_profile p', 'u.id=p.user_id')
->where('id=:id', array(':id'=>$id))
->queryRow();

更多信息在这里:http ://www.yiiframework.com/doc/guide/1.1/en/database.query-builder

你应该使用ActiveRecordClassName::model()->findByPk($id);or ActiveRecordClassName::model()->find($criteria),因为它使用defaultScope()和其他改进。

于 2013-12-21T17:29:32.010 回答