我正在使用Laravel 5.3的验证如下:
在我的模特中:
public static $validation = [
'name' => 'required',
'username' => 'required|alpha|unique:companies',
'email' => 'required|email|unique:companies',
];
在我的控制器中,我在创建新项目或编辑新项目时发布到相同的CompanyController@dataPost
方法:
public function dataPost(Request $request) {
// First validation
$this->validate($request, Company::$validation);
$id = $request->id;
if ($id > 0) {
// Is an edit!
$company = Company::find($id);
$company->update($request->all());
$company->save();
Session::flash('messageclass', 'success');
Session::flash('message', trans('companies.editedsuccessfully'));
} else {
// Is a create
$company = new Company($request->all());
$company->save();
Session::flash('messageclass', 'success');
Session::flash('message', trans('companies.createdsuccessfully'));
}
return redirect()->route('companyindex');
}
当我创建一个新项目时,唯一验证工作正常,但在编辑项目时会导致错误(如在其中标记用户名已经存在)。
知道如何避免这种情况吗?即使在编辑中,我仍然希望确保数据在更改时是唯一的,但如果值与之前相同,则忽略验证。
我知道我可以手动执行此操作,但我想知道是否有内置方法可以避免这种情况。
谢谢!
答案 0 :(得分:1)
我想你可以试试这个:
public static $validation = [
'name' => 'required',
'email' => Auth::check()
? 'required|email|unique:companies,email,'.Auth::id()
: 'required|email|unique:companies,email',
'username' => Auth::check()
? 'required|alpha|unique:companies,username,'.Auth::id()
: 'required|alpha|unique:companies,username',
];
希望这对你有用!!!
答案 1 :(得分:0)
您可以为insert
或update
public static $validation_update = [
'name' => 'required',
'username' => 'required|alpha',
'email' => 'required|email',
];
public static $validation_add = [
'name' => 'required',
'username' => 'required|alpha|unique:companies',
'email' => 'required|email|unique:companies',
];
然后在条件
中应用验证public function dataPost(Request $request) {
// First validation
$id = $request->id;
if ($id > 0) {
// Is an edit!
$this->validate($request, Company::$validation_update);
$company = Company::find($id);
$company->update($request->all());
$company->save();
Session::flash('messageclass', 'success');
Session::flash('message', trans('companies.editedsuccessfully'));
} else {
// Is a create
$this->validate($request, Company::$validation_add);
$company = new Company($request->all());
$company->save();
Session::flash('messageclass', 'success');
Session::flash('message', trans('companies.createdsuccessfully'));
}
return redirect()->route('companyindex');
}
答案 2 :(得分:0)
您也可以使用唯一属性更新email
字段。
以下规则将检查除当前列之外的其他列中的所有电子邮件的唯一性。
试试这个,
'email' => 'required|unique:users,email,' . $userId
此处$userId
是指当前更新的用户的id
。
您可以查看官方文档here
答案 3 :(得分:-2)
$ id = $ request-> id;
if ($id > 0) {
// Is an edit!
$this->validate($request, Company::$validation_update);
$company = Company::find($id);
$company->update($request->all());
$company->save();