2016-11-07 12 views
0

選択したタグ入力をMySQLデータベースに保存するためにSelect2ウィジェットを使用しました。私は010102, 010103, 010299のようなものがデータベーステーブルに格納されることを期待しています。ここでYii2 Kartik Select2複数のタグ入力文字列エラー

が更新view.php

echo $form->field($model, 'SpField')->label(false)->widget(Select2::className(), [ 
     'data' => ArrayHelper::map(Supplierfield::find()->all(), 'sfCode', 'sfCode'), 
     'options' => [ 
      'multiple' => true, 
      'placeholder' => 'Choose tag ...', 
     ], 
     'pluginOptions' => [ 
      'tags' => true 
     ] 
    ]); 

である:ここではモデル上の対応するルールは

public function rules() 
{ 
    return [ 
     [['spCode', 'SpName','SpPhone', 'SpEmail', 'SpAddress', 'SpPostcode', 'SpTown', 'SpState', 'SpDistrict','SpBumi', 'SpStatus'], 'required'], 
     [['RecordStamp','SpField'], 'safe'], 
     [['spCode'], 'string', 'max' => 7], 
     [['SpName', 'SpEmail'], 'string', 'max' => 50], 
     [['SpPhone'], 'string', 'max' => 20], 
     [['SpAddress'], 'string', 'max' => 100], 
     [['SpPostcode'], 'string', 'max' => 5], 
     [['SpTown', 'SpState'], 'string', 'max' => 30], 
     [['SpBumi', 'SpStatus'], 'string', 'max' => 15], 
     [['SpDistrict'], 'string', 'max' => 50], 
     [['spbalance','spfloatbalance'], 'number'], 
     [['SpField'], 'string', 'max' => 255, 'message' => 'Field must be a string'], 
     [['spCode'], 'unique'], 
    ]; 
} 

ですが、なぜ私はこのエラーを取得しています。入力フィールドは文字列でなければならないと言われています。

enter image description here

はFYI:SpFieldはVARCHAR(255)であるのフィールドとsfCodeはVARCHAR(10)でのフィールド。

ご迷惑をおかけして申し訳ありません。

+0

複数の配列を投稿する場合は、データを検証する前に文字列にする必要があります。あなたのモデルルールを提示してください –

+0

@HasiburRahaman私は質問を更新しました。どのように文字列に変換するのですか? – Etic

+0

1このルールを削除することができます。[2]この配列をjson_encodeを使って文字列に変換します。(このフィールドは文字列でなければなりません。 $ model-> SpField)を確認してから、 –

答えて

0

これは@HasiburRahmanの示唆したとおりです。

。モデルSupplierの文字列検証ルールは、ウィジェットの入力が文字列ではなく配列形式であるため、削除してください。

[['SpField'], 'string', 'max' => 255, 'message' => 'Field must be a string'], 

json_encode()を使用して入力を文字列に変換し、コントローラに保存します。

if ($model->load(Yii::$app->request->post()) && $model->save()) 
    { 
     $model->SpField = json_encode(Yii::$app->request->post('Supplier')['SpField']); //convert the array into string 
     $model->save();    
    } 

あなたはSelectセレクトウィジェットを使用して$dataを表示するように配列に戻ってそれを変換するために、json_decode()を使用することができます。私の場合は それは非常によく、私のような初心者のためにこの作品をこの$data = json_decode($model->SpField);

のようなものを見て。これが他の人にも役立つことを願っています。

0

破コマ値とblankspace

と入力 "" DBへのクエリの

public function actionCreateOrUpdate($id) 
    { 
     $model = $this->findModel($id); 

     if ($model->load(Yii::$app->request->post())) { 
      $model->SpField = implode (", ",$model->SpField); 
      $model->save(); 
      return $this->redirect(['view', 'id' => $model->id]); 
     } else { 
      return $this->render('create_or_update', [ 
       'model' => $model, 
      ]); 
     } 
    } 
関連する問題