我正在验证一个用户是否已经存在,但是我遇到了问题。
创建用户
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 con ese correo electrónico"
]);
$a= 'C'.$request['cedula'];
if(User::where('name',$a)){
return redirect()->back()->withErrors(['Un usuario con ese nombre ya existe, 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.' con 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 existe, revise la cédula y el rol']);
}
但是使用该代码,即使字段name
是唯一的,它也不允许我注册它。
显示每个表的结构
用户表CREATE TABLE `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` datetime DEFAULT NULL,
`updated_at` datetime 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` date NOT 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']
已经存在,如果它重定向回显示错误的形式。
Class "AppHttpControllersRule" not found
protected function storeCliente(Request $request)
{
$request->validate([
'name' => 'required|max:40|',
'surname' => 'required|max:40|',
'cedula' => [
'required',
'digits:10',
'numeric',
Rule::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 con ese nombre ya existe, revise la cédula y el rol",
'telefono.between' =>"El número de teléfono tiene que tener entre 9 y 15 caracteres",
'email.unique' =>"Ya existe un usuario con ese 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.' con usuario '. $usuario->name;
return redirect()->route('home',['mensaje'=>$mensaje]);
}
您应该在if条件中正确获取用户。
而不是
if(User::where('name',$a)){
....
}
试试这个
if(User::where('name',$a)->first()){
....
}
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 con ese correo electrónico"
]);
$a= 'C'.$request['cedula'];
if(User::where('name',$a)){
return redirect()->back()->withErrors(['Un usuario con ese nombre ya existe, 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.' con usuario '. $usuario->name;
return redirect()->route('home',['mensaje'=>$mensaje]);
}
您试图以这种方式验证用户是否有原因?您应该能够将其添加为另一个验证规则。尝试这样做(我只是复制了你的错误信息,你检查用户的名字和添加返回错误信息作为"cedula。unique"验证错误消息)。这个想法是这样的:
$request->validate([
// ...
'cedula' => [
'required',
'digits:10',
'numeric',
Rule::unique('users', 'name')
->where('name', 'C' . $request['cedula'])
],
],
[
// ...
'cedula.unique' =>"'Un usuario con ese nombre ya existe, revise la cédula y el rol'",
]);