模型保存多个记录和验证规则

时间:2011-08-12 00:56:17

标签: yii model yii-validation

我有一个案例,用户可以在列表框中选择多个值,并使用模型将其保存到数据库中。

这是表结构

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辆汽车,至少应选择一辆车。用户也可以一次选择5辆车,下次他来时,他应该能够选择最多5辆车,因为他已经保存了10条记录。

请你告诉我一些实现这个的想法吗?任何可以指导我的链接?

2 个答案:

答案 0 :(得分: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

答案 1 :(得分:0)

听起来您想使用scenarios,请参阅docs here。您可以根据用户流动态使用CModel::setScenario设置方案。