410060781 2017-08-01 14:14:51 2978次浏览 3条回复 0 0 0

用PHPExcel将本地的excel上传给服务器,在服务器后台程序中可以打印出来excel的所有数据,但是在插入数据库的时候,提示插入成功,但是在数据表中确只有一条数据,经过反复测试发现:foreach循环没有问题,问题出在一致循环的在修改插入的第一条数据,而不是重新插入新的数据,最后的结果是数据库中只插入了最后的那条数据,前面的数据全部被覆盖了。源码如下:请高手指教

    $res = $model->read($uploadfile);//上传的本地excel中的数据,
            var_dump($res);//打印出来的结果为二维数组

/** array (size=8) 2 =>

array (size=7)
  0 => string '后来时间都与你有关' (length=27)
  1 => string '6' (length=1)
  2 => string '100' (length=3)
  3 => string '30' (length=2)
  4 => string '28.4' (length=4)
  5 => string '天津人民出版社 ' (length=23)
  6 => string '张皓宸' (length=9)

3 =>

array (size=7)
  0 => string '守护故事的人(一部与《杀死一只知更鸟》相同深度和力量的作品)' (length=86)
  1 => string '6' (length=1)
  2 => string '100' (length=3)
  3 => string '30' (length=2)
  4 => string '29.7' (length=4)
  5 => string '百花洲文艺出版社' (length=24)
  6 => string '丽萨·温格特' (length=17)

4 =>

array (size=7)
  0 => string '后来时间都与你有关' (length=27)
  1 => string '6' (length=1)
  2 => string '100' (length=3)
  3 => string '30' (length=2)
  4 => string '28.4' (length=4)
  5 => string '天津人民出版社 ' (length=23)
  6 => string '张皓宸' (length=9)

5 =>

array (size=7)
  0 => string '后来时间都与你有关' (length=27)
  1 => string '6' (length=1)
  2 => string '100' (length=3)
  3 => string '30' (length=2)
  4 => string '28.4' (length=4)
  5 => string '天津人民出版社 ' (length=23)
  6 => string '张皓宸' (length=9)**/

            foreach ($res as $k => $v){
                $title = $v[0];
                $descr = $v[0];
                $cateid = $v[1];
                $num = $v[2];
                $price = $v[3];
                $saleprice = $v[4];
                $merchants = $v[5];
                $author = $v[6];
                $sellerid = (int)Yii::$app->session['sellers']['sellerid'];
                $model->title = $title;
                $model->descr = $descr;
                $model->cateid = $cateid;
                $model->num = $num;
                $model->price = $price;
                $model->saleprice = $saleprice;
                $model->merchants = $merchants;
                $model->author = $author;
                $model->sellerid = $sellerid;
        if ($model->save()){
                    echo "成功"."<br/>";
                }else{
                    echo "失败";
                }
  • 回复于 2017-08-02 11:30 举报

    这就是orm 不方便之处了。。。。你可以看下 yii2批量插入 这类教程。

  • 回复于 2017-08-09 09:31 举报

    兄弟,你在遍历里面save()肯定不行的啦,用批量插入吧,顺便提一下问问题有专门的问答版块

  • 回复于 2017-08-15 16:54 举报

    self::find()->createCommand()->batchInsert(self::tableName(), ['Field'], $list)->execute();

您需要登录后才可以回复。登录 | 立即注册