You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Yii 1.1x使用带条件的unique规则时出现错误的问题

解决Yii 1.1x同一分类下标题唯一的验证问题

嘿,我懂你的需求——要确保同一分类下的标题不能重复,但不同分类之间允许标题撞车对吧?你之前的验证规则没配置到点子上,所以才会出现错误。咱们直接上正确的解决方案:

在你的模型rules()方法里,需要用到Yii的unique验证器,并且指定联合唯一的字段组合(也就是title + category_id),这样系统就会同时检查这两个字段的组合是否在数据库中唯一。

完整的验证规则代码

public function rules() {
    return array(
        // 保留你原有的其他验证规则...
        // 新增/插入场景的验证:检查标题+分类的组合是否唯一
        array('title', 'unique', 'message' => '同一分类下已存在相同标题!', 'attributeNames' => array('title', 'category_id')),
        // 更新场景的验证:排除当前模型自身的记录,避免编辑时误判重复
        array('title', 'unique', 'message' => '同一分类下已存在相同标题!', 'attributeNames' => array('title', 'category_id'), 'except' => 'insert', 'criteria' => array(
            'condition' => 'id != :id',
            'params' => array(':id' => $this->id),
        )),
    );
}

关键细节说明

  • attributeNames:这是核心参数,指定了需要联合验证唯一性的字段数组。把title和category_id放进去后,系统就会判断这两个字段的组合是否唯一,完美匹配你的需求。
  • message:自定义验证失败时的提示文案,让用户能直观明白问题出在哪。
  • 更新场景的特殊处理:当编辑现有记录时,必须通过criteria添加排除当前ID的条件,否则系统会把当前正在编辑的记录也算作“重复项”,导致无法正常保存。

测试建议

  1. 新增一条记录:选分类A,输入标题“产品指南”,保存成功。
  2. 再新增一条记录:同样选分类A,输入“产品指南”,此时应该弹出你设置的错误提示。
  3. 新增第三条记录:选分类B,输入“产品指南”,应该能正常保存,符合跨分类允许重复的要求。

这样配置后,就能精准实现你想要的功能啦!

内容的提问来源于stack exchange,提问作者codingnighter2000

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.26 11:01:17