terry39
(Gamezoom)
1
刚刚试了下这个问题,
$m = MMM::model()->find(‘id=1’);
// 取出的数据 name=‘init’, age=‘10’;
sleep(10); //这期间通过别的手段修改数据库记录 name = ‘mmm’, age=‘20’;
$m->name = ‘hhh’;
$m->save();
结果数据库记录被修改成
name = ‘hhh’, age=‘10’;
是否可以记录原始数据, find() 出来的结果缓存在内存另一个位置中,用户重新设置的属性值 与 原始数据不相互覆盖,在save时,自动判断需要更新的字段。
现在可以使用的方式 是不是 save($attributes) 的方式,手工设置哪些属性需要修改 
测试过指定保存的属性,貌似不可以哇
qiang
(Qiang Xue)
2
数据库能做到的是确保保存操作的atomic性。如果你希望多条SQL的执行不被干扰,那么需要用transaction。
对于你所举的例子,我认为不用担心。这种结果是可以接受的(另外,你提出的解决方案是不可行的)。
terry39
(Gamezoom)
3
其实这个问题还是主要AR如何只更新部分字段,而不是全部字段! 目前AR在save的时候,会把所有字段再重新写回数据库吧?
qiang
(Qiang Xue)
4
请参看 CActiveRecord::save() API说明。你可以指定需要保存哪些column