Business
Jobs
  • About Us
  • Solutions
    • Job Postings
      Post your job and receive qualified candidates in 48h.
    • Candidate Assessments
      500+ technical and psychological tests, plus anti-fraud.
    • Headhunting
      Tailor-made executive search from start to finish.
    • Payroll + EOR
      Payroll dispersal and EOR across 15+ LATAM countries.
  • Pricing
  • Jobs

0

237
Views
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 answers
Answer question

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 Report

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 Report

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 Report
Answer question
Find remote jobs

Discover the new way to find a job!

Top jobs
Top job categories
Business
Post vacancy Pricing Sales
Legal
Terms and conditions Privacy policy
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Show me some job opportunities
There's an error!