2018-10-20 10:43:13 1795次浏览 3条回答 0 悬赏 10 金钱

例如,现在我有个ID列表 $id = [1,2,4,55]; 需要把他们在数据库的status值改为-1,你们会怎么做?
最开始我是foreach 列表 查询记录 一个一个保存为-1,现在觉得效率太低了,这么写的

\Yii::$app->db->createCommand()->update(self::tableName(), [
    'status' => self::$status_list['delete']
], "
    id IN ($idList)
")->execute();

但是。。。这个是否操作成功不好判断 想问下大家是怎么写这类的

最佳答案

  • bzzear 发布于 2018-10-22 16:26 举报

    用这个表生成的model直接调用updateAll,简单,快捷,方便。
    TModel::updateAll(['status' => -1],['in','id',$idList]);

    4 条回复
    回复于 2018-10-23 10:11 回复

    你会判断 执行成功的 数量和操作的数量 是否一样也就是都执行成功吗?

    回复于 2018-10-23 10:59 回复

    不会, 这个数量不一定是一样的,如果你本来就有一个的值是-1,那不就是不一样了,所以,不需要的,需要catch下有没有异常,出现异常就回滚就好了

    回复于 2018-10-23 11:01 回复

    $transaction = Yii::$app->db->beginTransaction();
    //先删除关联的商品表
    try {
        TModel::updateAll(['status' => -1],['in','id',$idList]);
        $transaction->commit();
    } catch (\Exception $e) {
        $transaction->rollBack();
        exit($e->__toString());
    }
    exit('success')
    
    
    回复于 2018-10-23 15:00 回复

    好的十分感谢!

您需要登录后才可以回答。登录 | 立即注册
wpj130
职场新人

wpj130

注册时间:2018-07-03
最后登录:2022-04-20
在线时长:5小时16分
  • 粉丝2
  • 金钱25
  • 威望0
  • 积分75

热门问题