限制1应该与Yii中的queryRow一起使用?

时间:2013-10-25 10:19:09

标签: sql yii

我通常使用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应自动添加限制。否则用户将使用此查询获取单个记录,这将导致性能下降。

我的理解是正确还是错过了什么?

1 个答案:

答案 0 :(得分:0)

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);ActiveRecordClassName::model()->find($criteria),因为它使用了defaultScope()和其他改进。