Yii2检查beforeSave()和update(或insert)中模型的三个字段的组合是否存在


Yii2 check existance combination of three fields of model in beforeSave() and update(or insert)

我正在字符串中检查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]
        ];
    }

添加您的模型'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']
    ];
}