Модель сохранить несколько записей и правила проверки - PullRequest
0 голосов
/ 12 августа 2011

У меня есть случай, когда пользователь может выбрать несколько значений в списке и сохранить их в базе данных, используя модель.

Вот структура таблицы

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 и перемещается в targetCars с помощью Jquery (эта часть выполнена) и нажимает кнопку Сохранить или Отправить.

Теперь я смогу сохранить все машины, которые он / она выбрал в списке targetCars. Более того, в модели я должен поставить условие, что пользователь не может сохранить более 10 автомобилей, и должен быть выбран хотя бы один автомобиль. Кроме того, пользователь может выбрать 5 автомобилей одновременно, и в следующий раз, когда он придет, он сможет выбрать не более 5 автомобилей, поскольку он уже сохранил 10 записей.

Не могли бы вы дать мне идею реализовать это? какие-либо ссылки, которые могут мне помочь?

Ответы [ 2 ]

1 голос
/ 12 августа 2011

Ваш вопрос - ограничить выбор автомобилей 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
0 голосов
/ 12 августа 2011

Похоже, вы хотите использовать сценарии , см. документы здесь .Вы можете динамически установить сценарий с помощью CModel :: setScenario в зависимости от потока пользователя.

...