第一种方案
$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();
}
}
}
来源:oschina
链接:https://my.oschina.net/hongjiang/blog/3290460