2017-11-28 17 views
1

にDBへコンマ区切りの値。 保存値は、私はこのように作られたチェックボックスのリスト項目が含まれているyii2フォームを持っているyii2

私はこのように私のコントローラで作成する機能を修正しようとしました:

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

しかし、値が

+0

こんにちは、PHPの関数を使用してみてください配列を文字列に変換するには、serialize()を使用します。 $ array = implode( "、"、$ model-> MenuID); $ model-> MenuID = serialize($ array) –

答えて

0

はあなたがあなたのモデルrules()を設定する必要がデータベースに保存されていません。

$model->load(Yii::$app->request->post());を呼び出すときは、フレームワーク呼び出し方法setAttributes()とパラメーター$safeOnly = trueを呼び出します。 param $ safe = trueのこのメソッドは、モデルのルールに従って属性が安全かどうかをチェックします。モデルにルールがない場合は、すべての属性が安全でないとみなされ、モデルにデータが設定されません。

(ルールを追加)をモデルとあなたのコードのいくつかの追加情報

N.B.

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

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

    ... 

の作品ルールにシナリオを指定しない場合、デフォルトシナリオは'default'であり、モデルオブジェクトのインスタンス化中にシナリオを別のシナリオに設定すると機能しませんでした。私の例:私は前に書いたように

あなたが同じルールを持っていて、任意のルールbecouse負荷が'insert'シナリオに設立され、問題が帰ってきた後

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

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

モデルが空であるこのコードを実行します。したがって、特定のシナリオでのみ動作するルールが必要な場合は、'on'ルール定義を追加する必要があります。このように:

もっとたとえば
... 
public function rules() 
{ 
    return [ 
     ['MenuID', 'your-validation-rule', 'on' => 'insert'], 
    ]; 
} 
... 

説明を参照してください。

関連する問題