Senador:
Problema:
Si agrego un título, valida la unicidad en la misma categoría. Tal: 
Pero si agrego varias filas, la validación no funciona. Tal: 
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'; } }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;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:
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
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')); }) ]);