2017-02-21 26 views
0

1つのテーブルに同じレコードを挿入したい。私は以下のフォームに1つの入力配列しか持っていませんが、私はlabel input arrayの複数の時間レコードを保存したいと思います。 私のフォームは同じテーブルの複数のレコードを挿入するYii2

<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 
       ) 

     ) 

) 
+0

であるあなたがしますprint_rを共有してくださいすることができますあなたがあなたについて案内してくれるような結果を得たら、私はあなたを案内することができます – Dani

+0

@ダニが大変感謝しています。私はポストの配列の最後に見ることができる私の質問を変更しました – Coder

答えて

1

あなたは私はあなたが、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, 
      ]); 
     } 
    } 
+0

@ありがとうございました。しかし、私がそれらを更新するときに私がどのように対処するかもう一つのこと。 – Coder

+0

私はこれらのフィールドを更新するときにどのように表示するのですか? – Coder

+0

あなたは1つの入力フィールドにそれを表示したいですか? – Dani

関連する問題