yii如何简化检查,然后插入

yii如何简化检查,然后插入,yii,Yii,我正在使用Yii 1在数据不存在时插入数据 $email = 'xx@xx'; if( ! people::model()->exists("email = :email", array(':email'=>$email) ){ $people = new people(); $people->email = $email; $people->xx = xx // ... save } 我想这样写,既简单又快速: $peopl

我正在使用Yii 1在数据不存在时插入数据

$email = 'xx@xx';
if( ! people::model()->exists("email = :email", array(':email'=>$email) ){
     $people = new people();
     $people->email = $email;

     $people->xx = xx 
     // ... save
}
我想这样写,既简单又快速:

$people = new people();
$people->email = $email;
if( ! $people->exists() ){
     $people->xx = xx 
     // ... save
}

yii CActiveRecord是否有办法做到这一点,或者需要我扩展CActiveRecord?

是的,yii在CActiveRecord中确实有一个存在的方法。只需指定条件并调用exists(),模型将返回是否存在满足这些条件的记录


您不需要将CActiveRecord扩展到特定模型定义中的典型方式之外。

是的,Yii在CActiveRecord中确实有一个exists方法。只需指定条件并调用exists(),模型将返回是否存在满足这些条件的记录

您不需要将CActiveRecord扩展到特定模型定义中的典型方式之外。

简单地说,您可以在模型规则中使用validator

public function rules()
{        
    return array(
        array('field1,field2, field3, email, field4', 'required'),
        array('email', 'email','message'=>'Invalid email.'),
        array('email', 'unique', 'message' => 'Email already exists!'),
        ...................
        ...................

}            
简单地说,您可以在模型规则中使用验证器

public function rules()
{        
    return array(
        array('field1,field2, field3, email, field4', 'required'),
        array('email', 'email','message'=>'Invalid email.'),
        array('email', 'unique', 'message' => 'Email already exists!'),
        ...................
        ...................

}            

Yii对复合唯一密钥验证有限制。请点击此处:

因此,我建议采用这种独特的验证方式

在规则上,

array('username', 'validateUniqueUsername'),
然后是方法定义

public function validateUniqueUsername($attribute, $params)
{
    $validator = new CUniqueValidator();
    $validator->attributes = array($attribute);
    $validator->validate($this, array($attribute));
    if ($this->hasErrors($attribute)) {
        $this->clearErrors($attribute);
        $this->addError('username', Yii::t('auth', 'Username "'.$this->username.'" has already been taken.'));
    }
}

参考:

Yii对复合唯一密钥验证有限制。请点击此处:

因此,我建议采用这种独特的验证方式

在规则上,

array('username', 'validateUniqueUsername'),
然后是方法定义

public function validateUniqueUsername($attribute, $params)
{
    $validator = new CUniqueValidator();
    $validator->attributes = array($attribute);
    $validator->validate($this, array($attribute));
    if ($this->hasErrors($attribute)) {
        $this->clearErrors($attribute);
        $this->addError('username', Yii::t('auth', 'Username "'.$this->username.'" has already been taken.'));
    }
}

Ref:

您还可以在模型中放入逻辑,
beforeValidate()
函数您也可以在模型中放入逻辑,
beforeValidate()
函数这还将帮助您根据需要自定义错误消息。这也将帮助您根据需要自定义错误消息。