php - 如何在 Yii 中保存数据并确保正确保存?

标签 php yii orm

示例:我们有一个测试表,它有 3 列:id、watchers、title。 我们有一个代码:

$test = Test::model()->findByPk(1);
echo $test->watchers; // 0
$test->title = 'another';
$test->save();

当我们调用 save() 时,ir 会生成 sql 查询,例如 “UPDATE test SET title='another', watchers='0' WHERE id='1'”。所以,看起来一切都很好。但问题是,如果其他进程在当前脚本中的 findByPk 和 save 之间更新 watchers 变量,则代码将生成错误的值。所以:

$test = Test::model()->findByPk(1);
echo $test->watchers; // 0
$test->title = 'another';
//HERE WE HAVE A CODE WHICH PERFORMS FOR 1 SECOND. MEANWHILE ANOTHER PROCESS
// UPDATES TABLE WITH WATCHERS = 1
$test->save();

所以,这段代码会将记录的 watchers 字段保存回 0。如何克服这个问题?为什么 Yii ORM 不保存更改的值?为什么它试图保存所有值?谢谢。

最佳答案

由于您获取了 $test 中的每个值,因此当您执行 $test->save(); 时,每个属性都会使用新记录或之前的值保存包含。

当您查询 $test = Test::model()->findByPk(1); 时,$test->watchers; 将与之前的值相同当您执行查询时,只有当您执行另一个 select 查询时,该值才会更改(如果观察者的值被另一个 update 查询更改)。希望这是有道理的:P

您可以尝试以下更新方法:

Test::model()->updateByPk(1, array(
                'title' => 'another'
            ));

这将执行以下查询:

UPDATE `test` SET `title`=:yp0 WHERE `test`.`id`=1.
Bound with :yp0='another'

关于php - 如何在 Yii 中保存数据并确保正确保存?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32990274/

相关文章:

php - 使用Python插入MySQL二进制(8)字段

php - CActiveForm 及其行为没有名为 "getErrors"的方法或闭包。

php - YII 服务器迁移。内部服务器错误。 CDb异常

python - 我需要将原始 MySQL 查询转换为 Django ORM 查询

php - simplepie 不解析 google 新闻 rss feed

php - MySQLi:使用变量查询另一个表

php - Yii登录成​​功后返回上次输入的URL

mysql - Doctrine 级联删除查询?

asp.net-mvc - 在 Automapper 中修剪字符串

php - CURL 发出请求时出错 : SSL connect error (error code: 35)