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) );?>

ユーザーはsourceCarsから車を選択し、Jqueryを使用してtargetCarsに移動し(この部分は完了です)、[保存]または[送信]ボタンをクリックします。

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

これを実装するためのアイデアを教えていただけますか?私を導くことができるリンクはありますか?

4

2 に答える 2

1

あなたの質問は1-10の間に車の選択を制限することです。クライアントとサーバーの両方でユーザー入力を検証する必要があります。サーバーでは、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
于 2011-08-12T01:34:54.177 に答える
0

シナリオを使用したいようです。こちらのドキュメントをご覧ください。ユーザーフローに基づいて、CModel::setScenarioを使用してシナリオを動的に設定できます。

于 2011-08-12T18:05:26.273 に答える