我正試圖驗證一個用戶是否已經存在,但我遇到了麻煩。
這是創建一個用戶的函式
protected function storeCliente(Request $request)
{
$request->validate([
'name' => 'required|max:40|',
'surname' => 'required|max:40|',
'cedula' => 'required|digits:10|numeric',
'email' => 'required|unique: users',
'telefono' => 'required|between:9,15',
'direccion' => 'required',
'ciudadResi' => 'required',
'fechaNacimiento' => 'required',
'genero' => 'required',
],
[
'name.max' =>"El nombre de la especialidad no puede ser mayor a 40 caracteres" ,
'surname.max' =>"El apellido de la especialidad no puede ser mayor a 40 caracteres",
'cedula.digits' =>"La cédula tiene que tener 10 caracteres",
'cedula.numeric' =>"La cédula tiene que ser numérica",
'telefono.between' =>"El número de teléfono tiene que tener entre 9 y 15 caracteres",
'email.unique' =>"Ya existe un usuario conese correo electrónico"。
]);
$a= 'C'.$request['cedula'] 。
if(User::where('name',$a)){
return redirect()->back()->withErrors(['Un usuario con ese nombre ya exist, revise la cédula y el rol'])。
}
$cliente= Persona::create([
'nombre' => $request['name']。
'apellido' => $request['surname'] 。
'cedula' => $request['cedula'] 。
'email' => $request['email'] 。
'telefono' =>$request['telefono'] 。
'direccion' =>$request['direccion'] 。
'ciudadResi' =>$request['ciudadResi'] 。
'fechaNacimiento' =>$request['fechaNacimiento'] 。
'genero' =>$request['genero'] 。
'estado'=> '1'。
'idTipoPersona'=>'2'$usuario= User::create([
'name' => 'C'.$request['cedula'] 。
'email' => $request['email'] 。
'password' => Hash::make('C'.$request['cedula'] )。
'role' => 'cliente',
'idPersona'=> $cliente-> id,
'estado'=> 2
]);
$mensaje = 'Se creó el cliente '.$cliente-> nombre. ' '.$cliente->apellido.' with usuario '. $usuario->name;
return redirect()->route('home',['mensaje'=>$mensaje] )。)
}
正如你所看到的,我創建了一個persona,用戶是根據來自表單輸入的cedula欄位按照這個邏輯創建的。'C'.$request['cedula']
我試圖檢查用戶名是否已經存在,如果它已經存在,則重定向到表單,并通過下面的代碼報告錯誤。
$a= 'C'.$request['cedula'] 。
if(User::where('name',$a)){
return redirect()->back()->withErrors(['Un usuario con ese nombre ya exist, revise la cédula y el rol'])。
}
但是用這個代碼,即使欄位name是唯一的,它也不允許我注冊它。
我將展示每個表的結構。
用戶表
創建表 `users` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`role` varchar(20) DEFAULT NULL,
`name` varchar(100) DEFAULT NULL,
`email` varchar(100) DEFAULT NULL,
`password` varchar(250) DEFAULT NULL,
`created_at`日期 DEFAULT NULL,
`updated_at`日期時間 DEFAULT NULL,
`remember_token` varchar(255) DEFAULT NULL,
`idPersona` int(11) DEFAULT NULL,
`estado` tinyint(1) NOT NULL DEFAULT 31,
`prueba` varchar(100) DEFAULT NULL,
PRIMARY KEY (`id`),
KEY `users_FK` (`idPersona`),
CONSTRAINT `users_FK` FOREIGN KEY (`idPersona`) REFERENCES `personas` (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=48 DEFAULT CHARSET=utf8mb4
角色表
CREATE TABLE `personas` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`nombre` varchar(50) NOT NULL,
`apellido` varchar(50) NOT NULL,
`cedula` varchar(10) NOT NULL,
`email` varchar(40) DEFAULT NULL,
`telefono` varchar(13) DEFAULT NULL,
`direccion` varchar(100) NOT NULL,
`ciudadResi` varchar(50) NOT NULL,
`fechaNacimiento`日期不是NULL。
`genero` varchar(100) NOT NULL,
`estado` binary(1) NOT NULL,
`idTipoPersona` int(11) NOT NULL,
`idPersona` int(11) DEFAULT NULL,
PRIMARY KEY (`id`),
KEY `personas_FK` (`idTipoPersona`),
KEY `personas_FK_1` (`idPersona`),
CONSTRAINT `personas_FK` FOREIGN KEY (`idTipoPersona`) REFERENCES `tipo_personas` (`id`)。
CONSTRAINT `personas_FK_1` FOREIGN KEY (`idPersona`) REFERENCES `personas` (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=70 DEFAULT CHARSET=utf8mb4
如果我沒有說清楚,我可以編輯這個問題,試圖更好地解釋自己。
總之,我想做的是,在向資料庫添加角色和用戶之前,檢查由'C'.$request['cedula']組成的用戶名是否已經存在,如果存在,則重定向到顯示錯誤的表單。
編輯 這就是我在Robert建議后的函式,錯誤在于類 "AppHttpControllersRule "未找到
protected function storeCliente(Request $request)
{
$request->validate([
'name' => 'required|max:40|',
'surname' => 'required|max:40|',
'cedula' => [
'required',
'digits:10',
'numeric'。
規則::unique(' users', 'name')
->where('name', 'C' . $request['cedula'])
],
'email' => 'required|unique: users',
'telefono' => 'required|between:9,15',
'direccion' => 'required',
'ciudadResi' => 'required',
'fechaNacimiento' => 'required',
'genero' => 'required',
],
[
'name.max' =>"El nombre de la especialidad no puede ser mayor a 40 caracteres" ,
'surname.max' =>"El apellido de la especialidad no puede ser mayor a 40 caracteres",
'cedula.digits' =>"La cédula tiene que tener 10 caracteres",
'cedula.numeric' =>"La cédula tiene que ser numérica",
'cedula.unique' =>"Un usuario conese nombre ya existe, revise la cédula y el rol",
'telefono.between' =>"El número de phoneéfono tiene que tener entre 9 y 15 caracteres",
'email.unique' =>"Ya existe un usuario conese correo electrónico".
]);
$cliente= Persona::create([
'nombre' => $request['name']。
'apellido' => $request['surname'] 。
'cedula' => $request['cedula'] 。
'email' => $request['email'] 。
'telefono' =>$request['telefono'] 。
'direccion' =>$request['direccion'] 。
'ciudadResi' =>$request['ciudadResi'] 。
'fechaNacimiento' =>$request['fechaNacimiento'] 。
'genero' =>$request['genero'] 。
'estado'=> '1'。
'idTipoPersona'=>'2'$usuario= User::create([
'name' => 'C'.$request['cedula'] 。
'email' => $request['email'] 。
'password' => Hash::make('C'.$request['cedula'] )。
'role' => 'cliente',
'idPersona'=> $cliente-> id,
'estado'=> 2
]);
$mensaje = 'Se creó el cliente '.$cliente-> nombre. ' '.$cliente->apellido.' with usuario '. $usuario->name;
return redirect()->route('home',['mensaje'=>$mensaje] )。)
}
uj5u.com熱心網友回復:
你應該在你的if條件中正確獲取用戶。
而不是這樣
if(User::where('name',$a)){
....
}
試試這個
if(User::where('name',$a)-> first()){
....
}
uj5u.com熱心網友回復:
protected function storeCliente(Request $request)
{
$request->validate([
'name' => 'required|max:40|unique: users',
'surname' => 'required|max:40|',
'cedula' => 'required|digits:10|numeric',
'email' => 'required|unique: users',
'telefono' => 'required|between:9,15',
'direccion' => 'required',
'ciudadResi' => 'required',
'fechaNacimiento' => 'required',
'genero' => 'required',
],
[
'name.max' =>"El nombre de la especialidad no puede ser mayor a 40 caracteres" ,
'surname.max' =>"El apellido de la especialidad no puede ser mayor a 40 caracteres",
'cedula.digits' =>"La cédula tiene que tener 10 caracteres",
'cedula.numeric' =>"La cédula tiene que ser numérica",
'telefono.between' =>"El número de teléfono tiene que tener entre 9 y 15 caracteres",
'email.unique' =>"Ya existe un usuario conese correo electrónico"。
]);
$a= 'C'.$request['cedula'] 。
if(User::where('name',$a)){
return redirect()->back()->withErrors(['Un usuario con ese nombre ya exist, revise la cédula y el rol'])。
}
$cliente= Persona::create([
'nombre' => $request['name']。
'apellido' => $request['surname'] 。
'cedula' => $request['cedula'] 。
'email' => $request['email'] 。
'telefono' =>$request['telefono'] 。
'direccion' =>$request['direccion'] 。
'ciudadResi' =>$request['ciudadResi'] 。
'fechaNacimiento' =>$request['fechaNacimiento'] 。
'genero' =>$request['genero'] 。
'estado'=> '1'。
'idTipoPersona'=>'2'$usuario= User::create([
'name' => 'C'.$request['cedula'] 。
'email' => $request['email'] 。
'password' => Hash::make('C'.$request['cedula'] )。
'role' => 'cliente',
'idPersona'=> $cliente-> id,
'estado'=> 2
]);
$mensaje = 'Se creó el cliente '.$cliente-> nombre. ' '.$cliente->apellido.' with usuario '. $usuario->name;
return redirect()->route('home',['mensaje'=>$mensaje] )。)
}
uj5u.com熱心網友回復:
你想用這種方式來驗證用戶,有什么原因嗎?你應該可以把它作為另一個驗證規則來添加。試試這樣的方法(我只是復制了你的錯誤資訊,你正在檢查有這個名字的用戶,并把這個回傳的錯誤資訊作為 "cedula.unique "的驗證錯誤資訊)。這個想法是這樣的:
$request-> validate([
/ ...
'cedula' =>[
'required',
'digits:10',
'numeric'。
規則::unique(' users', 'name')
->where('name', 'C' . $request['cedula'])
],
],
[
/ ...
'cedula.unique' =>"'Un usuario con ese nombre ya exist, revise la cédula and el rol'",
]);
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/324223.html
標籤:
