$model = Person::findOne($person_id);
$model->status = $status;
$model->save();
或
Yii::$app->db->createCommand()->update('person',
['status'=>$status],
'person_id='.$person_id)
->execute();
就性能而言,这两个片段如何相互不同,虽然结果是一样的?
答案 0 :(得分:1)
第一个事实是基于相关活动记录是通过初步选择获得的事实,然后在调用save()(和相关验证)方法时通过更新执行更改。
第二个不执行选择以获取相关的activeRecord ..
并仅执行更新
所以第二个应该比第一个更快..
答案 1 :(得分:1)
使用ActiveRecord(第一个示例)通常需要更多内存(因为对象设置,拆卸,验证等)。
第二个会快得多,但它不会验证数据。大多数情况下,您需要使用一组“小”ActiveRecords对象(这就是为什么Yii2在其DataProviders中有分页)。 ActiveRecord功能更强大,因为您可以遍历关系,使用虚拟属性等。
但是对于批量插入第二个,它要好得多。您也可以像这样使用它在一个查询中插入多行:
Yii::$app->db->createCommand()->batchInsert('tableName', ['id', 'title', 'created_at'], [
[1, 'title1', '2015-04-10'],
[2, 'title2', '2015-04-11'],
[3, 'title3', '2015-04-12'],
])->execute();