2017-03-12 1 views
0

Ich habe viel über meine Frage gelernt und habe es nicht herausgefunden. Ich brauche zwei oder mehr Werte in der Datenbank activeFormcheckboxlist Mehrfachauswahl in db yii2?

<?= $form->field($model, 'quant[]')->checkboxList([ 
         'one' => 'one', 
         'two' => 'two', 
         'three' => 'three', 
         'four' => 'four'], 
         ['separator' => '<br>']); ?> 

So, nachdem sie von checkboxList() Aus meiner Sicht zu schreiben, egal erstellen, wie viel Werte, die ich wählen, nur einer wird in db hinzuzufügen. Ich erkannte, dass ich ein Array im Controller bekommen muss und dann wird es in der Datenbank speichern. Etwas wie folgt aus:

public function actionCreate() 
    { 

     $model = new TakMol(); 

     if ($model->load(Yii::$app->request->post()) && $model->save()) { 
      $model->quant=implode(',',$_POST['TakMol']['quant']); //change items into string to be saved 

      return $this->redirect(['index']); 

     } else { 
      $model->quant=explode(',',$model->quant); //string to array to fill the checkboxlist 

      return $this->render('create', [ 
       'model' => $model, 

      ]); 
     } 

    } 

Vielleicht brauche ich so etwas wie dies zu tun in actionCreate

$post=Yii::$app->request->post(); 
     $checkbox = array_keys ($post); 
     foreach ($checkbox as $value){ 
      $model = new TakMol();    
        $model->quant = $model->id; 
        $model->quant = $value; 
        $model->save(); 
     } 

Ich habe versucht, und andere Optionen, es hat nicht funktioniert. Ich werde dankbar sein für Hilfe bei der Lösung.

_form(cell)index(cell)

+0

Haben Sie Ihre Frage nicht richtig.Was Sie tun wollen.Und was ist aktuelle Ausgabe. –

+0

In 'CRUD'' _form' muss ich mehrere Kontrollkästchen aktivieren, wenn ich ein Formular erstelle. Dann bekomme ich in meinem db (selbe im Index 'GridView' Spalte' quant') eingegebene Werte. Zum Beispiel: add img _form (Zelle) Ich wähle 'Quant: 1,3,4'. Nach form create gibt es nur einen (ersten) Wert zurück, addiere img index (cell). –

Antwort

0

Wenn Sie ein Formular-Modell als Unterstützung für zusätzliches Feld für Basismodell verwenden, können Sie diese Aufgabe innerhalb dieser neuen Klasse behandeln.

Setzen TakMolForm.php Datei im gleichen Ordner von TakMol.php:

class TakMolForm extends TakMol 
{ 
     private $_quantArray; 

     public function getQuantArray() 
     { 
      // Initialize it from 'quant' attribute 
      if($this->_quantArray == null) 
      { 
       $this->_quantArray = explode(',', $this->quant); 
      } 
      return $this->_quantArray; 
     } 

     public function setQuantArray($value) 
     { 
      $this->_quantArray = $value; 
     } 


     public function rules() 
     { 
      return array_merge(parent::rules(), [ 
        [['quantArray'], 'safe'], 

      ]); 
     }  
} 

Dann im Controller ändern TakMol in TakMolForm:

public function saveModel($model) 
{ 
    // Here is called getQuantArray() getter from TakMolForm model 
    $model->quant = implode(',', $model->quantArray); 

    return $model->save();  
} 

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

    if ($model->load(Yii::$app->request->post()) && $this->saveModel($model)) { 
     return $this->redirect(['index']); 

    } else { 
     return $this->render('create', [ 
      'model' => $model, 
     ]); 
    } 

} 

public function actionUpdate($id) 
{ 
    $model = TakMolForm::findOne($id); 

    if ($model->load(Yii::$app->request->post()) && $this->saveModel($model)) { 
     return $this->redirect(['index']); 
    } else { 
     return $this->render('update', [ 
      'model' => $model, 
     ]); 
    } 
} 

schließlich in der Ansicht, die Sie quantArray Feld stattdessen verwenden Quant:

+0

Ich versuche, Ihre Antwort zu verwenden, und in TakMolForm.php hat einen Fehler: 'Syntaxfehler, unerwartete 'getQuantArray' (T_STRING), erwartete Variable (T_VARIABLE)' Wenn ich 'public getQuantArray()' -> 'public $ getQuantArray() 'returns' Syntaxfehler, unerwartete '(', erwartet ',' oder ';' '. Ich habe ein paar Variationen versucht, aber habe das gleiche Ergebnis. Was kann dieser Fehler sein? –

+0

Welche Zeile gibt Ihnen den Fehler? –

+0

Dieser: http://imgur.com/a/cUK7j –