dada

dada

这家伙有点懒,还没写个性签名!

  • 财富值1815
  • 威望值30
  • 总积分2525

个人信息

  • 2019-01-18 已签到
    连续签到1天,获得了5个金钱
  • 2019-01-07 已签到
    连续签到1天,获得了5个金钱
  • 回复了 的回答

    D:\website\www\commands\ArtticleController.php

    namespace app\commands;
    use yii\console\Controller;
    class ArticleController extends Controller
    {
    public function actionDelhref()
        {
            echo "删除文章内容中末尾的推荐阅读\n\n";
            $query = (new \yii\mongodb\Query())
                ->select(['title','content'])
                //先用两条测试一下,要不然整个库搞坏了,就要跑路了!
    //            ->where(['in','_id',['5b5822a9b3402a105752ef49','5b595035b3402a613d1670a9']])
                ->from(Article::collectionName());
            $comm = Yii::$app->mongodb->createCommand();
            $i=1;
            $errcount=0;
            $k=0;
            //foreach($query->batch(10) as $infos){ //每批次处理10条记录
            //批处理 默认每批次100条记录
            foreach($query->batch() as $infos){
                $j=1;
                foreach($infos as $info){
                    $content = $info['content'];
                    $content=preg_replace("/推荐阅读:(.*?).html/",'',$content);             
                    $newArr=[
                        'content'=>$content,
                    ];
    //                echo $content;
                    $comm->update(Article::collectionName(),['_id'=>(string)$info['_id']], $newArr);
                    echo $i."-".$j.":".$info['title']." 处理完毕\n";
                    $j++;
                }
                print("\n\n++++++++++++++下一批++++++++++++++++++++\n");
                $i++;
            }
            print("\n\n==============出错数量:".$errcount." ============\n");
    //        print("==============无需处理的记录数量:".$k." ============\n\n");
            return ExitCode::OK;
        }
    

    运行:
    D:\website\www> yii article/delhref

    这种的话,如果上万条数据,就应该比较卡了

  • 回复了 的回答

    首先你的例子是这样的:

    Update t_user set name='aa' where id=1
    Update t_user set name='bb' where id=2
    Update t_user set name='cc' where id=3
    

    然后你又说“要修改的值都是一样的”,请问,是都修改name字段,但是name字段的值不一样?
    或者是:都修改name,并且值也一样:

    Update t_user set name='aa' where id=1
    Update t_user set name='aa' where id=2
    Update t_user set name='aa' where id=3
    

    如果是第一种情况,Yii2没有,我目前也没见过哪个框架有这个。如果真发现了,你可以分享出来,我们都受益。
    如果是第二种情况,我也得这就好说了。

    tabName::updateAll(['name'=>'aa'],['id'=>['1','2','3']);
    

    从原理来说,我觉得如果真要封装出符合第一种情况更新的方法,肯定得用到循环吧。
    先看看再说吧。

    就是第二种情况 在网上有搜到这种,但是还没来得及测试

  • 要修改的值都是一样的

  • 提出了问题
    Yii2 的批量修改更新是怎么操作的
  • 2019-01-04 已签到
    连续签到1天,获得了5个金钱
  • 2018-11-05 已签到
    连续签到1天,获得了5个金钱
  • 2018-11-02 已签到
    连续签到1天,获得了5个金钱
总监 等级规则
2525/5000
资料完整度
10/100
用户活跃度
0/100

Ta的关注

0

Ta的粉丝

0

Ta的访客

9