Yii2 的批量修改更新是怎么操作的 [ 2.0 版本 ]
如题
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
类似这种的操作,很多每次大概上万
请问怎么批量修改 循环的就不要了
诗酒论年华 补充于 2019-01-04 18:11
要修改的值都是一样的
最佳答案
-
首先你的例子是这样的:
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']);
从原理来说,我觉得如果真要封装出符合第一种情况更新的方法,肯定得用到循环吧。
先看看再说吧。共 2 条回复za510771920 回复于 2019-07-30 17:25 回复CI 可以批量处理第一种情况
其他 6 个回答
-
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共 2 条回复 -
-
-
-
-
诗酒论年华 重庆
注册时间:2017-05-23
最后登录:2021-04-22
在线时长:63小时32分
最后登录:2021-04-22
在线时长:63小时32分
- 粉丝2
- 金钱3615
- 威望30
- 积分4545