Yii2检查beforeSave()中三个模型字段的存在组合并更新(或插入)

时间:2015-12-15 18:54:02

标签: php activerecord yii2

我要检查beforeSave函数中的重复数据。但它没有正常工作:有我的beforeSave函数体:

$duplicate=self::find()->where(["u_id"=>$this->attributes["u_id"],"link_doc_id"=>$this->attributes["link_doc_id"],"link_doc_type"=>$this->attributes["link_doc_type"]])->one();
        if($duplicate){
            $insert=false;
            $this->or_id=$duplicate->or_id;
        }

但我得到重复的Integrity constraint violation error。我知道手动设置$this->or_id时我做错了。那么如何检查数据库中的重复数据。 我的验证规则:

public function rules()
    {
        return [
            [['reorder', 'link_doc_id', 'u_id', 'period', 'close_doc_id', 'close_uid'], 'integer'],
            [['create_date', 'deadline', 'close_date', 'view','description' ], 'safe'],
            [['close_description'], 'string'],
            [['link_doc_type', 'close_doc_type'], 'string', 'max' => 20],
            [['desc'], 'string', 'max' => 50]
        ];
    }

1 个答案:

答案 0 :(得分:1)

在模型'u_id', 'link_doc_id', 'link_doc_type'中添加唯一的验证,例如......

public function rules()
{
    return [
        [['reorder', 'link_doc_id', 'u_id', 'period', 'close_doc_id', 'close_uid'], 'integer'],
        [['create_date', 'deadline', 'close_date', 'view','description' ], 'safe'],
        [['close_description'], 'string'],
        [['link_doc_type', 'close_doc_type'], 'string', 'max' => 20],
        [['desc'], 'string', 'max' => 50],
        [['u_id', 'link_doc_id', 'link_doc_type'], 'unique', 'targetAttribute' => ['u_id', 'link_doc_id', 'link_doc_type'], 'message' => 'Error Message hear']
    ];
}