插入同一个表Yii2的多个记录

时间:2017-02-21 12:26:40

标签: yii2

我想在一个表中插入相同的记录。我在下面的表单中只有一个输入数组,但我想为label input array保存多个时间记录。 我的表格是

<div class="surveys-questions-form">

    <?php $form = ActiveForm::begin(); ?>

    <?php

        if(isset($_GET['option_id']) and $_GET['option_id'] > 0)
            $id= $_GET['option_id'];
        else 
            $id= $model->option_id;
        echo $form->field($model, 'question_id')->hiddenInput(['value' => $id])->label(false);
    ?>

   <div class="col-md-6">
    <div id="question_wrapper">
        <?= $form->field($model, 'type')->dropDownList([ 'text' => 'Text', 'numbers' => 'Numbers', 'date' => 'Date', 'texarea' => 'Texarea', 'checkbox' => 'Checkbox', 'radio' => 'Radio', 'rating' => 'Rating', ], ['prompt' => '']) ?>
        <div id="add_more_field">
            <?= $form->field($model, 'label[]')->textInput(['maxlength' => true]) ?>
        </div>
        <div class="form-group">
            <?php
                echo Html::a('Add more', 'javascript:void(0);', [
                    'id' => 'surveys-questions-new-button', 
                    'class' => 'pull-right btn btn-primary btn-xs'
                ])
            ?>
        </div>
    </div>
   </div>
    <div class="col-md-12">
    <div class="form-group">
        <?= Html::submitButton($model->isNewRecord ? 'Create' : 'Update', ['class' => $model->isNewRecord ? 'btn btn-success' : 'btn btn-primary']) ?>
    </div>
     </div>
    <?php ActiveForm::end(); ?>

</div>

和控制器

public function actionCreate()
{
    $model = new QuestionsOptions();

   if ($model->load(Yii::$app->request->post()) && $model->save()) {
        return $this->redirect(['view', 'id' => $model->option_id]);
    } else {
        return $this->renderAjax('create', [
            'model' => $model,
        ]);
    }
} 

当我尝试提交表单时,给我以下错误。

Label must be a string. 

我的$ _POST数组

  Array
(
    [_csrf-backend] => LXBhajI3YVpOIikeRWYHYkNCAD4Kb1ZrQzwER21GL2MdCTgkWm5ZDQ==
    [QuestionsOptions] => Array
        (
            [question_id] => 47
            [type] => numbers
            [label] => Array
                (
                    [0] => Label1
                    [1] => Label2
                    [2] => Labe3
                )

        )

)

1 个答案:

答案 0 :(得分:3)

如果你想保存多个记录使用循环我建议你使用foreach循环,最好是

    public function actionCreate()
 {
      $model = new QuestionsOptions();

     if ($model->load(Yii::$app->request->post())) {
           if(sizeof(array_filter($_POST['QuestionsOptions']['label'])) > 0){
             foreach($_POST['QuestionsOptions']['label'] as $key => $row){
                  $model->setIsNewRecord(true);
                  $model->id = null;
                  $model->label = $row;
                  $model->save();
             } 
          }
            return $this->redirect(['view', 'id' => $model->option_id]);
        } else {
            return $this->renderAjax('create', [
                'model' => $model,
            ]);
        }
    }