Validation unicité sur multiple colonnes
Comment valider une clé unique composite avec Laravel ?
Je vois beaucoup de packages qui, lorsqu’ils ont besoin d’une unicité sur une « clé composite », ont recourt au package « unique_with Validator Rule For Laravel » (felixkiss/uniquewith-validator) pour la validation des FormRequest.
Ce dernier s’utilise par exemple de cette façon :
1'email' => 'unique_with:customers,shop_id',
Ici l’adresse email d’un client doit être unique dans une boutique ; la clé d’unicité est la composition « email-shop_id ».
Pour ignorer un id donné (dans le cas de la modification) :
1'email' => 'unique_with:customers,shop_id,'.$id,
Sauf que le package mentionné ci-dessus, ne semble plus maintenu et qu’il y a la possibilité de le faire avec la règle de validation « unique » native de Laravel :
1'email' => Rule::unique('customers')->where(function ($query) {2 return $query->where('boutique_id', $this->shop_id);3})
Et pour ignorer l’id :
1'email' => Rule::unique('customers')->where(function ($query) {2 return $query->where('boutique_id', $this->shop_id);3})->ignore($id)
Détails dans la documentation https://laravel.com/docs/validation#rule-unique