2017-02-21 4 views
0

Ich möchte denselben Datensatz in eine Tabelle einfügen. Ich habe nur ein Eingabe-Array in der folgenden Form, aber ich möchte mehrere Zeit aufnehmen für label input array speichern. meine Form istMehrere Datensätze einer Tabelle einfügen 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> 

und Controller

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, 
     ]); 
    } 
} 

Gib mir die folgende Fehlermeldung, wenn ich versuche Formular abzuschicken.

Label must be a string. 

My $ _POST Array

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

     ) 

) 
+0

können Sie die print_r bitte teilen Ergebnis, so dass ich eine Idee über Sie bekommen Postdaten dann kann ich Ihnen helfen – Dani

+0

@Dani vielen Dank. Ich habe meine Frage geändert, die Sie im Post-Array zuletzt sehen können – Coder

Antwort

1

Wenn Sie Schleife mehrere Datensatz Verwendung speichern möchte ich vorschlagen, dass Sie es foreach-Schleife zu verwenden, am besten ist

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

@thank Sie so sehr. Aber noch eine Sache, wie ich umgehen werde, wenn ich sie aktualisiere. – Coder

+0

Ich meine, wie ich diese Felder zeige, wenn ich sie aktualisiere? – Coder

+0

möchten Sie es in einem Eingabefeld anzeigen ??? – Dani

Verwandte Themen