YIi批量插入

与世无争的帅哥 提交于 2020-04-21 15:36:24

第一种方案 

$model=new User();
foreach($data as $attributes){
     $_model=clone $model;
     $_model->setAttributes($attributes);
     $_model->save();
}

第二种方案

$model=new User();
foreach($data as $attributes){
      $model->isNewRecord=true;
      $model->setAttributes($attributes);
      $model->save()&&$model->id=0;
}

Yii2.0批量插入: (推荐使用这种方案)

Yii::$app->db->createCommand()->batchInsert(UserModel::tableName(), ['user_id','username'], [
    ['1','test1'],
    ['2','test2'],
    ['3','test3'],  
])->execute();

如果封装的sql数据过多 

ERROR 1406 : Data too long for column 解决办法

解决方案 1

在my.ini里找到
sql-mode=”STRICT_TRANS_TABLES,NO_AUTO_Create_USER,NO_ENGINE_SUBSTITUTION”
把其中的STRICT_TRANS_TABLES,去掉,
或者把sql-mode=STRICT_TRANS_TABLES,NO_AUTO_Create_USER,NO_ENGINE_SUBSTITUTION

注释掉,然后重启mysql就ok了

解决方案2 .使用 array_slice 进行截取

     $tem_arr = [];
                foreach ($result as $key=>$value){
                    $value = str_replace("\r","",$value);
                    $value = str_replace("\n","",$value);
                    $tem_arr[] = [
                      "name"=>mb_substr(trim($mobile_name_arr[$value]),0,3,"utf-8"),
                      "mobile"=>(string)trim($value),
                      "label_id"=>trim($mobile_label_arr[$value])?trim($mobile_label_arr[$value]):1,
                      "create_time"=> date("Y-m-d H:i:s")
                    ];
                }
                $count = count($tem_arr);
                //一次1000
                $num = intval($count/1000)+1;
                for ($i=0;$i<$num;$i++){
                    $tem = array_slice($tem_arr,$i*1000,1000);
                    if($tem){
                        \Yii::$app->mika_db->createCommand()->batchInsert(NongShangMem::tableName(), ['name','mobile','label_id','create_time'], $tem)->execute();
                    }
                }
            }

 

 

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!