诗酒论年华
- 诗酒论年华 2019-02-20 已签到连续签到3天,获得了15个金钱
- 诗酒论年华 2019-02-19 已签到连续签到2天,获得了10个金钱
- 诗酒论年华 2019-02-18 已签到连续签到1天,获得了5个金钱
- 诗酒论年华 2019-02-15 已签到连续签到1天,获得了5个金钱
- 诗酒论年华 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']);
从原理来说,我觉得如果真要封装出符合第一种情况更新的方法,肯定得用到循环吧。
先看看再说吧。就是第二种情况 在网上有搜到这种,但是还没来得及测试