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(这部分已完成),然后单击 Save 或 Submit 按钮。

现在我应该能够保存他/她在 targetCars 列表中选择的所有汽车。此外,在模型中我应该设置一个条件,即用户不能保存超过 10 辆汽车,并且至少应该选择一辆汽车。此外,用户一次可以选择 5 辆车,下次他来的时候应该最多只能选择 5 辆车,因为他已经保存了 10 条记录。

你能给我一些想法来实现这个吗?任何可以指导我的链接?

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 回答