使用yii2将多记录插入数据库

时间:2016-09-18 20:02:49

标签: yii yii2 yii2-advanced-app

我想在一个操作中将许多记录插入数据库。

在此控制器中,我使用 foreach 插入数据库,但只有最后一条记录插入数据库,我不知道原因。我想将所有记录插入数据库。

我的控制器:

              if (isset($_POST['month'])) {
                    $name = $_POST['month'];
                    $price = $_POST['Request'];
                    $i = 0;
                    foreach ($name as $month) {
                        $model->month = $month;
                        $model->price = $price['price'];
                        $model->save(false);
                        $i++;
                    }
                        $pay_info = [
                            'cost' => $price['price'],
                            'title' => 'title'];
                        return $this->render('payment', ['pay_info' => $pay_info]);
                }

1 个答案:

答案 0 :(得分:1)

一种简单的方法是基于这样一个事实:您应该为每个要保存的实例创建一个新模型 (您的控制器代码不完整,所以我无法知道您的模型)

             if (isset($_POST['month'])) {
                $name = $_POST['month'];
                $price = $_POST['Request'];
                $i = 0;
                foreach ($name as $month) {
                    $model =  new YourModel(); /*   here */
                    $model->month = $month;
                    $model->price = $price['price'];
                    $model->save(false);
                    $i++;
                }
                    $pay_info = [
                        'cost' => $price['price'],
                        'title' => 'title'];
                    return $this->render('payment', ['pay_info' => $pay_info]);
            }

但我还要探索batchInsert命令http://www.yiiframework.com/doc-2.0/yii-db-command.html#batchInsert()-detail

对于批量插入,您可以使用月份和价格构建一个关联数组,例如:

 $my_array=   [
      ['January', 30],
      ['Febrary', 20],
      ['March', 25],
   ]

\Yii::$app->db->createCommand()->
       batchInsert('Your_table_name', ['month', 'price'],$my_array)->execute();