2017-11-21 17:13:36 2409次浏览 3条回答 1 悬赏 30 金钱

插入记录时候,主键重复,怎么在提交前前端提示,而不是直接弹出数据库错误。

补充于 2017-11-21 22:34

我现在用了rule验证来解决

['username', 'unique', 'targetClass' => 'rbac\models\User', 'message' => '用户名已存在.']

最佳答案

  • Steven0T 发布于 2017-11-21 17:53 举报

    1、做的严谨一点的话,逐渐主键重复就更新呀,为什么还要新增?
    2、

    if (!$model->save()) {
        $errors = $this->getErrors();
        $str = [];
        foreach ($errors as $error) {
             $str[] = implode(';', $error);
        }
        return implode(';', $str);
    }
    

    这里获取错误有很多方法,自己去看下

  • 回答于 2017-11-22 18:11 举报

    你在逗我 主键是什么类型的? 居然会重复!!!
    你可以先查后增!

  • 回答于 2017-11-24 09:08 举报
    use yii\validators\Validator;
    class SettingValidator extends Validator
    {
        protected $ErrorMsg = '主键重复!!';
    
        /**
         *
         * 服务端验证
         *
         * @param \yii\base\Model $model
         * @param string $attribute
         */
        public function validateAttribute($model, $attribute)
        {
            $exist = Setting::find()->where([$attribute=>$model->key])->one();
            if($exist) {
                $this->addError($model, $attribute, $this->ErrorMsg);
            }
        }
    
        /**
         *
         * 客户端验证
         *
         * @param \yii\base\Model $model
         * @param string $attribute
         * @param \yii\web\View $view
         * @return null|string
         */
        public function clientValidateAttribute($model, $attribute, $view)
        {
            $message = $this->ErrorMsg;
            return <<<JS
    messages.push('{$message}');
    JS;
        }
    

    $model->key

    key 是你的主键字段!

    使用:(模型验证规则里引入)

        {
            return [
                 [['name'], SettingValidator::className(),'message'=>1111],
             ];
       }```
    
    
    
    1 条回复
    回复于 2017-11-27 16:40 回复

    这也是个好方法! 比我那个科学!

您需要登录后才可以回答。登录 | 立即注册
秀小川
主管

秀小川

注册时间:2017-08-16
最后登录:2022-05-23
在线时长:20小时47分
  • 粉丝1
  • 金钱455
  • 威望0
  • 积分655

热门问题