php-Yii ActiveRecord-有没有办法只更新脏属性?

在我的应用程序中,我有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] 举报,一经查实,本站将立刻删除。

相关推荐