Php 如何在记录更新中验证唯一字段
我最近启动了一个laravel项目来控制一些活动,但我目前在验证方面遇到了问题,特别是在更新包含唯一值的表上的特定记录时 在上个月Laravel8发布的几天内,有几个注释A开始了这个项目,所以也许有一些变化正在影响我 这些是我的迁移 第一个是用户及其数据,Php 如何在记录更新中验证唯一字段,php,laravel,laravel-blade,laravel-8,Php,Laravel,Laravel Blade,Laravel 8,我最近启动了一个laravel项目来控制一些活动,但我目前在验证方面遇到了问题,特别是在更新包含唯一值的表上的特定记录时 在上个月Laravel8发布的几天内,有几个注释A开始了这个项目,所以也许有一些变化正在影响我 这些是我的迁移 第一个是用户及其数据, 由于输入名称与列名不匹配,因此在创建规则时必须传递列名。根据,如果数据库使用的列与传递的列不同,则还需要传递列名: Rule::unique('usuarios', 'alias')->ignore($usuario) 您也可以这样
由于输入名称与列名不匹配,因此在创建规则时必须传递列名。根据,如果数据库使用的列与传递的列不同,则还需要传递列名:
Rule::unique('usuarios', 'alias')->ignore($usuario)
您也可以这样做: 我不清楚您的数据库结构,但我可以给您以下示例:
用户
是一个表名
name是要验证的列
'name' => 'unique:users,name,' . request('id')
在更新功能中,您可以使用
'telefono_usuario' => 'unique:usuarios,telefono_usuario,' . $usuario->id_usuario,
telefono_usuario作为您的域名
独特:usuarios是您的模型
$usuario->id\u usuario是您要更新的id刚刚添加了一个您想要询问的密钥。我只是觉得很难理解谢谢:)这就是解决问题的方法现在我可以毫无问题地更新,只是一个简单的问题,你认为我应该保持表单中字段的名称与模型中的名称相同吗?只是为了保持一致性。我发现在大多数情况下,如果字段名相同,这会有所帮助。跟踪内容以及在数据库和post字段之间映射字段更容易。这导致了一个错误,内部查询引擎无法找到字段SQLSTATE[42S22]:未找到列:1054 where子句中的未知列“id”(SQL:select count(*)从
usuarios
wheretelefono_usuario
=+00112345678和id
5)的聚合看来您没有在模型中定义主键。请尝试受保护的$primaryKey='id_usuario';如果表主键为“id\u usuario”
<?php
namespace App\Http\Controllers;
use Illuminate\Http\Request;
use App\Models\usuarios;
use DB;
use Illuminate\Support\Facades\Storage; //para almacenar
use Illuminate\Http\File;
use Illuminate\Validation\Rule;
class UsuariosController extends Controller
{
/**
* Muestra el formulario para agregar usuarios
* Este debe estar disponible solo para el administrador
*
* @return \Illuminate\Http\Response
*/
public function create()
{
$tipos_usuarios = DB::table('tipos_usuarios')->where('nombre_tipo_usuario', '!=' ,'Administrador')->get();
$cargos_usuarios = DB::table('cargos_usuarios')->get();
return view('layouts/sistema/usuarios/agregar_usuario', ['tipos_usuarios' => $tipos_usuarios, 'cargos_usuarios' => $cargos_usuarios] );
}
/**
* Store a newly created resource in storage.
*
* @param \Illuminate\Http\Request $solicitud
* @return \Illuminate\Http\Response
*/
public function store(Request $solicitud)
{
$solicitud->validate([
'archivo_foto_usuario' =>['required', 'mimes:jpeg,png, webp,jpg', 'dimensions:min_width=50,min_height=50,max_width=200,min_height=200'],
'nombre_usuario' => ['required', 'min:3', 'max:255'],
'apellido_usuario' => ['required', 'min:3', 'max:255'],
'telefono_usuario' => ['required', 'regex:/^\s*(?:\+?(\d{1,3}))?[-. (]*(\d{3})[-. )]*(\d{3})[-. ]*(\d{4})(?: *x(\d+))?\s*$/','unique:usuarios,telefono_usuario' ],
'alias_usuario' => ['required', 'min:3', 'max:255','unique:usuarios,alias'],
'contraseña_usuario' => ['required','min:8','regex:/^.*(?=.{3,})(?=.*[a-zA-Z])(?=.*[0-9])(?=.*[\d\x])(?=.*[!$#%]).*$/'],
'correo_usuario' => ['required', 'regex:/[a-z0-9._%+-]@manilastudio.com$/', 'unique:usuarios,correo'],
'tipo_usuario' => 'required',
'cargo_usuario' => 'required',
], [
'archivo_foto_usuario.required' => 'Se necesita una imagen en formato compatible',
'archivo_foto_usuario.mimes' => 'Formato de imagen no soportado',
'archivo_foto_usuario.dimensions' => 'La imagen debe ser de mimino 50x50 y maximo 200x200',
'nombre_usuario.required' => 'Campo requerido, introduzca al menos 4 caracteres.',
'nombre_usuario.min' => 'Campo requerido, introduzca al menos 4 caracteres.',
'apellido_usuario.required' => 'Campo requerido, introduzca al menos 4 caracteres.',
'apellido_usuario.min' => 'Campo requerido, introduzca al menos 4 caracteres.',
'telefono_usuario.required' => 'Introduza un numero teléfonico valido',
'telefono_usuario.regex' => 'El formato debe ser +50512345678',
'telefono_usuario.unique' => 'Este número ya esta en uso',
'alias_usuario.required' => 'Campo requerido, introduzca al menos 4 caracteres.',
'alias_usuario.min' => 'Campo requerido, introduzca al menos 4 caracteres.',
'alias_usuario.unique' => 'Esta alias ya esta en uso',
'contraseña_usuario.required' => 'Campo requerido, introduzca al menos 8 letras, con números o caracteres',
'contraseña_usuario.min' => 'Campo requerido, introduzca al menos 8 letras, con números o caracteres.',
'contraseña_usuario.regex' => 'La contraseña temporal debe tener letras o números y caracteres',
'correo_usuario.regex' => 'El correo debe usar el dominio manilastudio.com',
'correo_usuario.required' => 'Se necesita asignar un correo electronico',
'correo_usuario.unique' => 'Este correo ya esta en uso'
]);
$nuevo_usuario = new usuarios();
$nuevo_usuario->nombre_usuario = $solicitud->input('nombre_usuario');
$nuevo_usuario->apellido_usuario = $solicitud->input('apellido_usuario');
/**Guardar en un directorio */
if ($solicitud->hasFile('archivo_foto_usuario'))
{
$nuevo_usuario->foto_usuario = $solicitud->archivo_foto_usuario->store('img/usuarios', 'public');
$solicitud->file('archivo_foto_usuario')->store( 'img/usuarios/');
}
else
{
$nuevo_usuario->foto_usuario = 'img/usarios/user.png';
}
$nuevo_usuario->alias = $solicitud->input('alias_usuario');
$nuevo_usuario->contraseña = $solicitud->input('contraseña_usuario');
$nuevo_usuario->telefono_usuario = $solicitud->input('telefono_usuario');
$nuevo_usuario->correo = $solicitud->input('correo_usuario');
$nuevo_usuario->id_tipo_usuario = $solicitud->input('tipo_usuario');
$nuevo_usuario->id_cargo_usuario = $solicitud->input('cargo_usuario');
$nuevo_usuario->fecha_registro = date("Y-m-d");
$nuevo_usuario->fecha_retiro = null;
$nuevo_usuario->respuesta_pregunta = 'hola';
$nuevo_usuario->estado_usuario = true;
$nuevo_usuario->save();
return redirect('/usuarios');
}
/**
* Show the form for editing the specified resource.
*
* @param \App\Models\usuarios $id_usuario
* @return \Illuminate\Http\Response
*/
public function edit(usuarios $usuario)
{
// $usuario = usuarios::find($usuario);
$tipos_usuarios = DB::table('tipos_usuarios')->where('nombre_tipo_usuario', '!=' ,'Administrador')->get();
$cargos_usuarios = DB::table('cargos_usuarios')->get();
return view('layouts/sistema/usuarios/editar_usuario', ['usuario' => $usuario, 'tipos_usuarios' => $tipos_usuarios, 'cargos_usuarios' => $cargos_usuarios]);
}
/**
* Update the specified resource in storage.
*
* @param \Illuminate\Http\Request $request
* @param \App\Models\usuarios $user
* @return \Illuminate\Http\Response
*/
public function update(Request $solicitud, usuarios $usuario)
{
// $usuario = usuarios::findOrFail($id_usuario);
// dd($usuario->id_usuario);
$valido = $solicitud->validate([
'estado_usuario' =>['required'],
'archivo_foto_usuario' =>['required', 'mimes:jpeg,png, webp,jpg', 'dimensions:min_width=50,min_height=50,max_width=200,min_height=200'],
'nombre_usuario' => ['required', 'min:3', 'max:255'],
'apellido_usuario' => ['required', 'min:3', 'max:255'],
'telefono_usuario' => ['required', 'regex:/^\s*(?:\+?(\d{1,3}))?[-. (]*(\d{3})[-. )]*(\d{3})[-. ]*(\d{4})(?: *x(\d+))?\s*$/', Rule::unique('usuarios')->ignore($usuario) ],
'alias_usuario' => ['required','min:3','max:255',Rule::unique('usuarios')->ignore($usuario)],
'contraseña_usuario' => ['required','min:8','regex:/^.*(?=.{3,})(?=.*[a-zA-Z])(?=.*[0-9])(?=.*[\d\x])(?=.*[!$#%]).*$/', Rule::unique('usuarios')->ignore($usuario)],
'correo_usuario' => ['required', 'regex:/[a-z0-9._%+-]@manilastudio.com$/', /*'unique:usuarios,correo'*/ Rule::unique('usuarios')->ignore($usuario)],
'tipo_usuario' => 'required',
'cargo_usuario' => 'required',
],
[
'estado_usuario.required' => "Debe fijarse un estado para este usuario",
'archivo_foto_usuario.required' => 'Se necesita una imagen en formato compatible',
'archivo_foto_usuario.mimes' => 'Formato de imagen no soportado',
'archivo_foto_usuario.dimensions' => 'La imagen debe ser de mimino 50x50 y maximo 200x200',
'nombre_usuario.required' => 'Campo requerido, introduzca al menos 4 caracteres.',
'nombre_usuario.min' => 'Campo requerido, introduzca al menos 4 caracteres.',
'apellido_usuario.required' => 'Campo requerido, introduzca al menos 4 caracteres.',
'apellido_usuario.min' => 'Campo requerido, introduzca al menos 4 caracteres.',
'telefono_usuario.required' => 'Introduza un numero teléfonico valido',
'telefono_usuario.regex' => 'El formato debe ser +50512345678',
'telefono_usuario.unique' => 'Este número ya esta en uso',
'alias_usuario.required' => 'Campo requerido, introduzca al menos 4 caracteres.',
'alias_usuario.min' => 'Campo requerido, introduzca al menos 4 caracteres.',
'alias_usuario.unique' => 'Esta alias ya esta en uso',
'contraseña_usuario.required' => 'Campo requerido, introduzca al menos 8 letras, con números o caracteres',
'contraseña_usuario.min' => 'Campo requerido, introduzca al menos 8 letras, con números o caracteres.',
'contraseña_usuario.regex' => 'La contraseña temporal debe tener letras o números y caracteres',
'correo_usuario.regex' => 'El correo debe usar el dominio manilastudio.com',
'correo_usuario.required' => 'Se necesita asignar un correo electronico',
'correo_usuario.unique' => 'Este correo ya esta en uso'
]);
$usuario->nombre_usuario = $solicitud->input('nombre_usuario');
$usuario->apellido_usuario = $solicitud->input('apellido_usuario');
/**Guardar en un directorio */
if ($solicitud->hasFile('archivo_foto_usuario'))
{
Storage::disk('public')->delete($usuario->foto_usuario);
$usuario->foto_usuario = $solicitud->archivo_foto_usuario->store('img/usuarios', 'public');
$solicitud->file('archivo_foto_usuario')->store( 'img/usuarios/');
}
else
{
$usuario->foto_usuario = 'img/usarios/user.png';
}
// dd($solicitud->hasFile('archivo_foto_usuario'));
$usuario->alias = $solicitud->input('alias_usuario');
$usuario->contraseña = $solicitud->input('contraseña_usuario');
$usuario->telefono_usuario = $solicitud->input('telefono_usuario');
$usuario->correo = $solicitud->input('correo_usuario');
$usuario->id_tipo_usuario = $solicitud->input('tipo_usuario');
$usuario->id_cargo_usuario = $solicitud->input('cargo_usuario');
$usuario->fecha_registro = date("Y-m-d");
if ($solicitud->estado_usuario == 0)
{
$usuario->fecha_retiro = date("Y-m-d");
}
$usuario->respuesta_pregunta = 'hola';
$usuario->estado_usuario = $solicitud->estado_usuario;
$usuario->save();
return redirect('/usuarios');
}
}
...
and this is my view
...
@section('titulo', 'Modificar datos de Usuario')
<x-master>
<div class="container-fluid mt-5">
<div class="text-left">
<h1 class="font-weight-bolder">
Modificar Datos de Usuario
</h1>
</div>
<div class="mt-5">
<form id="formulario-agregar-usuario" class="form" method="POST" action="/usuarios/{{ $usuario->id_usuario }}" enctype="multipart/form-data">
@csrf
@method('PUT')
<div class="row">
<div class="col-sm-2">
<div class="border rounded p-2 bg-white">
<div class="border rounded">
<img class="border rounded-circle w-100 img-fluid mr-3" src="/storage/{{$usuario->foto_usuario}}" alt="" title="Nombre Usuario">
</div>
</div>
<br>
<input class="btn" type="file" name="archivo_foto_usuario">
@error('archivo_foto_usuario') <div class="validacion" >{{ $errors->first('archivo_foto_usuario')}}</div> @enderror
<div class="mt-4">
<input type="radio" name="estado_usuario" id="activo" value="1" @if ($usuario->estado_usuario == 1 ) checked="checked" @endif>
<label for="activo" class="font-weight-bolder text-uppercase text-success" >Activo</label><br>
<input type="radio" name="estado_usuario" id="suspender" value="0" @if ($usuario->estado_usuario == 0 ) checked="checked"@endif>
<label for="suspender" class="font-weight-bolder text-uppercase text-danger">Suspender</label>
@error('nombre_usuario') <div class="validacion" >{{ $errors->first('estado_usuario')}}</div> @enderror
</div>
</div>
<div class="col-sm-6 ml-lg-4 ml-sm-0">
<div class="row">
<div class="form-group col-md-6">
<label for="txtNombre_usuario" class="font-weight-bolder text-uppercase">Nombre Usuario</label>
<input id="txtNombre_usuario" class="form-control" type="text" name="nombre_usuario" value="{{ $usuario->nombre_usuario }}">
@error('nombre_usuario') <div class="validacion" >{{ $errors->first('nombre_usuario')}}</div> @enderror
</div>
<div class="form-group col-md-6">
<label for="txtApellido_correo" class="font-weight-bolder text-uppercase">Apellido Usuario</label>
<input id="txtApellido_usuario" class="form-control" type="text" name="apellido_usuario" value="{{ $usuario->apellido_usuario }}">
@error('apellido_usuario') <div class="validacion" >{{ $errors->first('apellido_usuario')}}</div> @enderror
</div>
<div class="form-group col-md-6">
<label for="txtTelefono_Usuario" class="font-weight-bolder text-uppercase">Telefono Usuario</label>
<input id="txtTelefono_Usuario" type="tel" class="form-control" name="telefono_usuario" placeholder="ejemplo +505812345678" value="{{ $usuario->telefono_usuario }}">
@error('telefono_usuario') <div class="validacion" >{{ $errors->first('telefono_usuario')}}</div> @enderror
</div>
<div class="form-group col-md-6">
<label for="txtemail" class="font-weight-bolder text-uppercase">Correo</label>
<input id="txtemail" class="form-control" type="email" name="correo_usuario" value="{{ $usuario->correo_usuario }}">
@error('correo_usuario') <div class="validacion" >{{ $errors->first('correo_usuario')}}</div> @enderror
</div>
<div class="form-group col-md-6">
<label for="sltTipo_Usuario" class="font-weight-bolder text-uppercase">Tipo de Usuario</label>
<select id="sltTipo_Usuario" class="form-control" name="tipo_usuario" >
@foreach ($tipos_usuarios as $tipo)
<option value="{{$tipo->id_tipo_usuario}}" @if ($tipo->id_tipo_usuario == $usuario->id_tipo_usuario) selected="selected" @endif>{{$tipo->nombre_tipo_usuario }}</option>
@endforeach
</select>
</div>
<div class="form-group col-md-6">
<label for="sltCargo_Usuario" class="font-weight-bolder text-uppercase">Cargo de Usuario</label>
<select id="sltCargo_Usuario" class="form-control" name="cargo_usuario">
@foreach ($cargos_usuarios as $cargo)
<option value="{{$cargo->id_cargo_usuario}}" @if ($cargo->id_cargo_usuario == $usuario->id_cargo_usuario) selected="selected" @endif>{{$cargo->nombre_cargo}}</option>
@endforeach
</select>
</div>
<div class="form-group col-md-6">
<label for="txtAlias_usuario" class="font-weight-bolder text-uppercase">Alias Usuario</label>
<input id="txtAlias_usuario" class="form-control" type="text" name="alias_usuario" value="@if (old('alias_usuario') !== null ) {{old('alias_usuario')}}@else {{$usuario->alias}}@endif">
@error('alias_usuario') <div class="validacion" >{{ $errors->first('alias_usuario')}}</div> @enderror
</div>
<div class="form-group col-md-6">
<label for="txtcontraseña" class="font-weight-bolder text-uppercase">Contraseña Temporal</label>
<input id="txtcontraseña" class="form-control" type="password" name="contraseña_usuario" value="{{ $usuario->contraseña}}">
@error('contraseña_usuario') <div class="validacion" >{{ $errors->first('contraseña_usuario')}}</div> @enderror
<div class="validacion" ></div>
</div>
</div>
<div class="text-left">
<button type="submit" class="btn btn-primary">Modificar Usuario</button>
</div>
</div>
</div>
</form>
</div>
</div>
</x-master>
Rule::unique('usuarios', 'alias')->ignore($usuario)
'name' => 'unique:users,name,' . request('id')
'telefono_usuario' => 'unique:usuarios,telefono_usuario,' . $usuario->id_usuario,