Laravel validate at least one item in a form array
I think you need a custom validation rule like the following because min is not for the elements of the array.
Validator::extend('check_array', function ($attribute, $value, $parameters, $validator) { return count(array_filter($value, function($var) use ($parameters) { return ( $var && $var >= $parameters[0]); }));});
You can create ValidatorServiceProvider and you can add these lines to boot method of ValidatorServiceProvider. Then you need to add Provider to your providers array in config/app.php.
App\Providers\ValidatorServiceProvider::class,
Or you just add them top of the action of your controller.
At the end you can use it like this in your validation rules.
'items' => 'check_array:1',
Note: if I understand you correctly it works.
In addition ot Hakan SONMEZ's answer, to check if at least one array element is set, the Rule object can be used. For example create rule class and name it ArrayAtLeastOneRequired().
To create new rule class run console command:
php artisan make:rule ArrayAtLeastOneRequired
Then in created class edit method passes():
public function passes($attribute, $value) { foreach ($value as $arrayElement) { if (null !== $arrayElement) { return true; } } return false; }
Use this rule to check if at least one element of array is not null:
Validator::make($request->all(), [ 'array' => [new ArrayAtLeastOneRequired()], ]);
If you are using this in your controller file then I guess it should be
$this->validate($request, [ 'items' => 'required|min:1']);
or this one
$validator = Validator::make($request->all(), [ "items.*" => 'required|min:1',]);
you can refer How to validate array in Laravel? to this as well.