我要检查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]
];
}
答案 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']
];
}