简体   繁体   中英

Model save mutiple records and validation rules

I have a case where user can select multiple values in the list box and save it to the database using model.

Here is the table structure

user_id int(11) , cars_id int(5)

Here is the snippet of my view

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

User selects the cars from sourceCars and moves into targetCars using Jquery ( This part is done) and clicks on Save or Submit button.

Now I should be able to save all the cars he/she selected in the targetCars list. Moreover in model I should put a condition that user can't save more than 10 cars and at least one car should be selected. Also user can select 5 cars at one time and next time when he comes he should be able to select max 5 cars only since he already save 10 records.

Could you please throw me some idea to implement this? any Links that can guide me?

your question is to limit selection of cars between 1-10. You need validate user input both client and server. At server,you can custom a ActiveRecord validation

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

Sounds like you want to use scenarios , see docs here . You can dynamically set the scenario with CModel::setScenario based on the user flow.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM