2018-03-14 11:39:13 2124次浏览 3条回答 0 悬赏 40 金钱

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)]);

最佳答案

  • 回答于 2018-03-14 12:07 举报

    根据你的需求 有一个字段a是有一个特殊需求, 如果满足条件X, 就把这个字段置为0, 不满足就不更新.

    如果X不是Model数据表的字段,可以这么写if (满足条件X) {Model::updateAll(['b' => 0] )};

    如果X是Model数据表的字段,可以这么写 Model::updateAll(['b' => 0], 'X' => $condition);

    详见yii\db\ActiveRecord::updateAll源码有介绍

    1 条回复
    回复于 2018-03-14 13:41 回复

    这个X不属于数据表字段, 你这么写就和我上面那个if else写法一样, 我想的是在一个语句里面搞定.

  • 回答于 2018-03-14 17:18 举报

    Model::updateAll(['b'=>0, 'a'=>(X?0:a)]);

    这样应该可以

您需要登录后才可以回答。登录 | 立即注册
秀小川
主管

秀小川

注册时间:2017-08-16
最后登录:2022-05-23
在线时长:20小时47分
  • 粉丝1
  • 金钱455
  • 威望0
  • 积分655

热门问题