Yii 2 模型中实现属性组合唯一规则验证 [ 2.0 版本 ]
在多门店的管理中,需要实现的需求是同门店的菜品名称不能重复,
以下为模型部分代码,仅供参考,如有更好方法,请赐教~
public function rules()
{
return [
['name', 'check','on'=>['create']],//定义规则,在create场景中对name进行check方法验证,下面是方法的定义
............
];
}
public function check($attribute,$params){
if (empty($this->shop_id)) {
return $this->addError($attribute,'请选择门店!');
}
$dish=Dishes::findOne(['name'=>$this->name,'shop_id'=>$this->shop_id]);
if($dish){
$this->addError($attribute, '该菜品名称已存在!');
}else{
$this->clearErrors($attribute);
}
}
花椒 山东
注册时间:2015-07-10
最后登录:20小时前
在线时长:4895小时37分
最后登录:20小时前
在线时长:4895小时37分
- 粉丝16
- 金钱57728
- 威望630
- 积分112978
共 1 条评论
我也发一个,用yii\validators\UniqueValidator 类实现
public function rules() { return [ ['name', 'required', 'message' => '请选择门店!'], ['shop_id', 'required', 'message' => '请输入菜品名称!'], ['name', //只有 name 能接收错误提示,数组['name','shop_id']的场合,都接收错误提示 'unique', 'targetAttribute'=>['name','shop_id'] , 'targetClass' => '\models\Dishes', // 模型,缺省时默认当前模型。 'comboNotUnique' => '选择的门店内,该菜品名称已经存在!' //错误信息 ], ]; }
这样存在一个问题,更新操作时检查这两个字段,发现已经存在了。