2017-11-28 1 views
1

Ich habe eine yii2 Form, die ein Checkbox Listenelement enthält, die ich so gemacht:speicherte Wert von Checkboxlist db in yii2

<?php $CheckList = ["users" => 'Users', "attendance" => 'Attendance', "leave" => 'Leave', "payroll" => 'Payroll'];?> 

    <?= $form->field($model, 'MenuID')->checkboxList($CheckList,['separator'=>'<br/>']) ?> 

Nun, was ich brauche, ist den Wert in der Datenbankspalte als sparen Komma getrennter Wert.

Ich versuchte, die schaffen Funktion in meinem Controller auf diese Weise zu ändern:

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

    if ($model->load(Yii::$app->request->post())) { 


     if ($model->MenuID != " ") { 
      $model->MenuID = implode(",", $model->MenuID);     
     } 
     $model->save();    
     return $this->redirect(['view', 'id' => $model->RoleID]); 
    } else { 
     return $this->render('create', [ 
      'model' => $model, 
     ]); 
    } 
} 

aber die Werte sind nicht in der Datenbank werden

+0

Hallo, versuchen, die PHP-Funktion zu verwenden, serialize() um Arrays in Strings zu konvertieren. $ array = implode (",", $ model-> MenuID); $ model-> MenuID = serialize ($ array) –

Antwort

0

Sie benötigen rules() Ihr Modell setzen gespeichert.

Wenn Sie $model->load(Yii::$app->request->post()); anrufen die Framework-Aufruf-Methode setAttributes() mit Param $safeOnly = true. Diese Methode mit param $ safe = true überprüft, ob Attribute sicher sind oder nicht, gemäß den Regeln des Modells. Wenn Sie keine Regeln für das Modell haben, werden alle Attribute als unsicher eingestuft, sodass Ihr Modell nicht aufgefüllt wird.

hinzufügen Regeln() auf Ihrem Modell und der Code arbeitet

class Role extends yii\db\ActiveRecord 
{ 
    ... 

    public function rules() 
    { 
     return [ 
      ['MenuID', 'your-validation-rule'], 
     ]; 
    } 

    ... 

einige zusätzliche Informationen

N. B. Wenn Sie kein Szenario in den Regeln angeben, lautet das Standardszenario 'default', und wenn Sie während der Instanziierung des Modellobjekts ein Szenario auf ein anderes setzen, funktioniert es nicht. Mein Beispiel:

Sie haben die gleichen Regeln wie ich schon schrieb und Sie diesen Code ausführen

... 
$model = new Role(['scenario' => 'insert']); 

if ($model->load(Yii::$app->request->post())) { 
... 

Modell leer ist nach Last becouse irgendwelche Regeln in 'insert' Szenario beruht und Ihr Problem ist zurück. Wenn Sie also eine Regel möchten, die nur in einem bestimmten Szenario funktioniert, müssen Sie die Rules-Definition 'on' hinzufügen. Wie folgt aus:

... 
public function rules() 
{ 
    return [ 
     ['MenuID', 'your-validation-rule', 'on' => 'insert'], 
    ]; 
} 
... 

Weitere Beispiele und Erklärungen unter: