ActiveRecord做一个特殊的更新操作, [ 2.0 版本 ]
Model::update 更新一个表, 有一个字段a是有一个特殊需求, 如果满足条件X, 就把这个字段置为0, 不满足就不更新.
现在的写法是
if(x){
Model::updataAll(['b'=>0, a=>0]);
}else{
Model::updataAll(['b'=>0]);
}
有没有方法把这个语句简化一下, 类似于下面这种, 但是测试发现当条件X不满足的时候, a=>a这样写是有问题的, 试过a=>'a'也不行, 这种语句该怎么写
Model::updateAll(['b'=>0, a=>(X?0:a)]);
最佳答案
-
dingjj2010 发布于 2018-03-14 17:16 举报
$c = ['b'=>0];
x && $c['a']=0;
Model::updataAll($c);共 1 条回复saviorLv 觉得很赞
其他 2 个回答
-
根据你的需求 有一个字段a是有一个特殊需求, 如果满足条件X, 就把这个字段置为0, 不满足就不更新.
如果X不是Model数据表的字段,可以这么写if (满足条件X) {Model::updateAll(['b' => 0] )};
如果X是Model数据表的字段,可以这么写 Model::updateAll(['b' => 0], 'X' => $condition);
详见yii\db\ActiveRecord::updateAll源码有介绍
共 1 条回复 -
dingjj2010 回答于 2018-03-14 17:18 举报
Model::updateAll(['b'=>0, 'a'=>(X?0:a)]);
这样应该可以
秀小川
注册时间:2017-08-16
最后登录:2022-05-23
在线时长:20小时47分
最后登录:2022-05-23
在线时长:20小时47分
- 粉丝1
- 金钱455
- 威望0
- 积分655