我想在一个操作中将许多记录插入数据库。
在此控制器中,我使用 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]);
}
答案 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();