2011-08-12 6 views
0

リストボックスで複数の値を選択し、モデルを使用してデータベースに保存できるケースがあります。ここでモデルは複数のレコードと検証ルールを保存します

は、テーブル構造は、ここで

user_id int(11) , cars_id int(5) 

である私の見解の抜粋である

<?php echo CHtml::dropDownList("sourceCars", '',CHtml::listData(MasterCars::model()->findAll(),'cars_code','car_name'),array('size'=>20));?> 

<?php echo CHtml::dropDownList("targetCars", '', array(),array('size'=>20));?> 

ユーザーはjqueryのを使用してtargetCarsにsourceCarsと動くから車を選択する(この部分が行われます)と 保存または送信ボタンをクリックします。

これで、自分が選択したすべての車をtargetCarsリストに保存できるはずです。さらに、モデルでは、ユーザーが10台以上の車を保管することができず、少なくとも1台の車を選択する必要があるという条件を設定する必要があります。また、一度に5台の車を選ぶことができます。次回は、すでに10台のレコードを保存しているので、最大5台の車を選択できるはずです。

私はこれを実装するためにいくつか考えてください。私を導くリンクはありますか?

答えて

1

あなたの質問は1から10の間の車の選択を制限することです。 クライアントとサーバーの両方のユーザー入力を検証する必要があります。あなたがdocs hereを参照してください、scenariosを使用するようにサーバーで は、カスタムActiveRecordの検証

public function rules() 
{ 
    return array(
     array('cards_id', 'limitSelect','min'=>1,'max'=>10), 
    ); 
} 

public function limitSelect($attribute,$params) 
{ 
     //and here your code to get the count of selection of cars for a user 
     ... 
     if($count<=$params['min']) 
      $this->addError('cards_id','at least one car should be selected'); 
     if($count>=$params['max']) 
      $this->addError('cards_id',' can't select more than 10 cars'); 
} 



    //and for mutiple select you can code this: 
echo CHtml::dropDownList("sourceCars", '',CHtml::listData(MasterCars::model()->findAll(),'cars_code','car_name'),array('size'=>20,'multiple'=>true)); 
//anyway you can implement it in several way 
+0

応答@ user776067に感謝します。私はクライアントレベルで検証を行っています。しかしサーバーレベルでは、私は複数のレコードを挿入するためのヘルプを探しています...ユーザーがすでにデータベースに9台の車を持っていて、さらに10台の車を追加したい場合は、 、私はデータベースを照会し、彼の値を取得し、検証する必要があります... – Bujji

+0

DAOを使用してレコードを挿入する – Bujji

0

サウンズことができます。ユーザーフローに基づいてCModel::setScenarioでシナリオを動的に設定することができます。

関連する問題