gpt4 book ai didi

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

转载 作者:可可西里 更新时间:2023-11-01 01:02:07 26 4
gpt4 key购买 nike

在我的应用程序中,我有 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();
}

关于php - Yii ActiveRecord - 有没有办法只更新脏属性?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21441741/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com