在我的应用程序中,我有2个进程几乎同时运行并更新相同的AR模型.
当某些过程似乎未完成时,我正面临着该错误,但单独调试它们没有出现错误.
然后我知道问题可能在下一种情况下发生:
>进程A选择X行
>流程B选择X行
>流程B更新第X行
>流程A更新第X行
在描述的情况下,进程A将覆盖进程B编写的所有内容.
B和A都更新不同的属性.
有什么办法可以避免这种覆盖?是否有某种机制可以使AR仅更新“脏”属性,而不更新所有模型属性?
请不要在不使用AR的情况下向我解释解决方案.我明白.但是我想听听是否有一些解决方案可以让我仍然使用AR正确地进行所需的更新.
谢谢.
解决方法:
YourTable::model()->updateByPk($id, array(
'field1' => NewVal1,
'field2' => NewVal2,
'field3' => NewVal3
));
并利用交易:
$transaction=Yii::app()->db->beginTransaction();
try
{
//.... SQL executions OR model save()
$transaction->commit();
}
catch(Exception $e) // an exception is raised if a query fails
{
$transaction->rollback();
}
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。