Updatebypk运行一条Sql语句,save()运行两条?

下面这个方法要先select,然后再update




$post=Post::model()->findByPk(10);

$post->title='new post title';

$post->save(); // 将更改保存到数据库



而这个只用一条update语句




Post::model()->updateByPk($pk,$attributes,$condition,$params);



所以如果为了性能尽量用第二个方法?我理解对吗?

如果你没有其他钩子要挂接的话 第二个确实性能好 但第一个是OO标准方法 其他语言中也是这么做的 先查 再存 可以挂接before/after 系列钩子 并触发事件

如果你有这样的需求 还是建议用第一个 ;

:lol:

比如 上传照片 可以在afterSave中 : 更新相册总数(同步或用messageQueue异步),生成其他小图(中图,大图 也可以同步或异步) 往feed中插入记录 ,通知好友(订阅功能)

这就是如果用事件或者模板方法(覆盖 protected funciton afterSave)带来的hook(机会 挂接点) 也是Ar比较有用的地方 同理 用delete方法也可以促生这么多挂点

总之如果用批量操作方法或者绕过经典的crud实现的几个方法 就不会有这种机会了 ;但速度会高一些 自己权衡吧 如果是非sns性质系统可以用后者

太感谢了。不仅解决了主贴疑惑,而且又让我对mvc有了更深理解

小项目用第一种;高并发网站的话性能要求就更加凸显了。可恨的是我手头这个项目不大不小让人纠结 <_<