我通常使用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应自动添加限制。否则用户将使用此查询获取单个记录,这将导致性能下降。
我的理解是正确还是错过了什么?
答案 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()
和其他改进。