如何检查用户是否已经创建,如果没有,则创建,否则显示用户已创建的错误消息Laravel



我的首页上有一个注册表单,目的是检查是否已经创建了用户,如果用户已经存在,则显示一条错误消息,表明已经使用给定值创建了用户。

我的RegisterController创建方法现在看起来像这样:

public function create(Request $request) {
$create = User::create([
'email' => $request['email'],
'paypal_email' => $request['paypal_email'],
'password' => Hash::make($request['password']),
]);
if($create){
Company::create(['user_id' => $create->id]);
return redirect('/dashboard');
}
}

如何检查用户是否已经创建,如果是,则显示错误消息?

在控制器中:

$request->validate([
'email' => 'required|unique:database_table,column'
])->messages([
'email.unique' => 'User has already been registered.',
]);

那么在你看来:

@if($errors->any())
@foreach($errors->all() as $error)
{{ $error }}
@endforeach
@endif

您可以使用firstOrCreate方法。

基于laravel文档。

firstOrCreate方法将尝试使用给定的列/值对定位数据库记录。如果在数据库中找不到模型,将插入一条记录,其中包含第一个参数中的属性,以及可选的第二个参数中

第一个参数应该是匹配值对

例如:['email'=>$request['emaile']]

第二个参数是将插入数据库的值

$user = User::firstOrCreate(['email' => $request['email']]
,[
'email' => $request['email'],
'paypal_email' => $request['paypal_email'],
'password' => Hash::make($request['password']),
]);
if ($user) {
// records found
}

阅读此处的文档

在将注册数据存储到数据库之前和之后,我会做更多的工作,但对于验证,您可以使用Laravel验证。这是一个示例:

public function create(Request $request) {

$request->validate(    
[
'email' => 'required|string|email|max:255|unique:users',
'paypal_email' => 'required|string|paypal_email|max:255|unique:users',
'password' => 'required|string|min:6'
]
);
$create = User::create([
'email' => $request['email'],
'paypal_email' => $request['paypal_email'],
'password' => Hash::make($request['password'])
]);
if($create){
Company::create(['user_id' => $create->id]);
return redirect('/dashboard');
}
}

在视图中,验证错误可以像一样呈现

<!-- /resources/views/post/create.blade.php -->
<h1>Create Post</h1>
@if ($errors->any())
<div class="alert alert-danger">
<ul>
@foreach ($errors->all() as $error)
<li>{{ $error }}</li>
@endforeach
</ul>
</div>
@endif
<!-- Create Post Form -->

参考:Laravel 5.8验证

最新更新