我有一个案例,用户可以在列表框中选择多个值,并使用模型将其保存到数据库中。
这是表结构
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条记录。
请你告诉我一些实现这个的想法吗?任何可以指导我的链接?
答案 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设置方案。