Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

228
Vistas
La matriz de entrada no se valida si contiene más de un valor en la validación personalizada de laravel

Senador:

  • El título de cada categoría será único.
  • Quiero escribir un validador personalizado que verifique si existe el mismo título con categoría.

Problema:

Si agrego un título, valida la unicidad en la misma categoría. Tal: Está funcionando

Pero si agrego varias filas, la validación no funciona. Tal: ingrese la descripción de la imagen aquí

Creo que foreach en el archivo 'CategoryResolverTitle' se ejecuta una vez. Cuál es la solución. mi formulario

 <label for="Title">Title</label> <input type="text" name="names[]" class="form-control">

Mi validador personalizado:

 <?php namespace App\Rules; use App\Models\QueryManagement\CategoryResolver; use Illuminate\Contracts\Validation\Rule; class CategoryTitle implements Rule { /** * Create a new rule instance. * * @return void */ public function __construct() { // } /** * Determine if the validation rule passes. * * @param string $attribute * @param mixed $value * @return bool */ public function passes($attribute, $value) { foreach ($value as $element) { return !Category::whereDepartmentId(request('department'))->whereName($element)->exists(); } } /** * Get the validation error message. * * @return string */ public function message() { return 'Title under same category must be unique'; } }
over 4 years ago · Santiago Trujillo
3 Respuestas
Responde la pregunta

0

Su función passes() actual parece estar defectuosa. Solo iniciará el ciclo una vez, luego devolverá el resultado de la primera verificación de inmediato. Una mejor manera sería:

 foreach ($value as $element) { if(Category::whereDepartmentId(request('department'))->whereName($element)->exists()){ return false; } } return true;
over 4 years ago · Santiago Trujillo Denunciar

0

El símbolo de asterisco (*) se utiliza para comprobar los valores de la matriz, no la array en sí.

 $validator = Validator::make($request->all(), [ "names.*" => "required|string|distinct|min:3", ]);

En el ejemplo anterior:

  • "nombres" debe ser una matriz con al menos 3 elementos,
  • los valores en la matriz "names" deben ser cadenas distintas (únicas), de al menos 3 caracteres de longitud.

EDITAR : desde Laravel 5.5, puede llamar al método de validación () directamente en el objeto Solicitar de esta manera:

 $data = $request->validate([ "name.*" => "required|string|distinct|min:3", ]);

también sigue esta url para más detalles

over 4 years ago · Santiago Trujillo Denunciar

0

Puede usar la validación de matriz para esto. Hay una regla de validación específica que puede lograr la exclusividad de la base de datos:

 $request->validate([ "names.*" => Rule::unique('categories', 'name')->where(function ($q) { $q->where('department_id', request('department')); }) ]);
over 4 years ago · Santiago Trujillo Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda