2017-08-09 7 views
-1

でCheckBoxListのバリューストアYii2 - 私のDB構造のデータベース

service_request type enum('towel','tissue','napkin') 

はその後、私は、ティッシュタオルを選択すると

<?= $form->field($model, 'service_request')->checkBoxList([ 'towel' => 'Towel', 'tissue' => 'Tissue', 'napkin' => 'Napkin']) ?> 

その後、私の見解では、モデル

* @property string $service_request 

を持っていますそしてナプキンがフォームを提出すると、それはエラーがあると言っています

サービス・リクエストがString

でなければなりません

が複数の値を選択する際service_requestが配列になっているため、radioListへのCheckBoxListを変更してくださいあなたに

答えて

0

ありがとう、私を助けてください。 Enum型は文字列値のみを扱うことができます。

0

Joji Thomasと同様に、checkBoxListは配列をプロデュースします。 これを保存したい場合は、データベース構造を変更して、1対多の関係(各$モデルは複数のservice_request)をサポートする必要があります。残念なことに、Yiiはこの種のものをあまりよく使っていないので、あなたは自分でたくさんのことをしなければなりません。

まず、ServiceRequest ActiveRecordを作成する必要があります。あなたはこのような何か行う必要があります(モデルアクションを作成します)あなたのコントローラで次に

public function getServiceRequests() { 
    return $this->hasMany(ServiceRequest::className(), ['model_id' => 'id']; 
} 

次に、あなたの$modelニーズのような関係を持っている場合は

foreach (Yii::$app->request->post('ServiceRequest',[]) as $data) { 
    $item = new ServiceRequest($data); 
    $model->link('serviceRequests', $item); 
} 

をおたく更新チェックボックスをオンにしても、モデル更新アクションで同様のことをする必要があります。

0

まず、データ型をenumからvarcharに変更します。列挙型は単一の文字列値しか取らない。 第2に、save to dbの文字列にservice_request配列を含める必要があります。 モデル保存機能の前に以下のコードを使用してください。

$model->service_request = implode("," , $model->service_request); 
$model->save(); 
関連する問題