Active Record保存或创建命令

时间:2016-12-30 16:11:37

标签: php mysql yii2

$model = Person::findOne($person_id);
$model->status = $status;
$model->save();

Yii::$app->db->createCommand()->update('person',
              ['status'=>$status],
              'person_id='.$person_id)
         ->execute();

就性能而言,这两个片段如何相互不同,虽然结果是一样的?

2 个答案:

答案 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();