Validation de plusieurs colonnes pour l'unicité dans Laravel
Le système de validation de Laravel offre un moyen pratique de garantir que les données soumises à votre candidature répondent à certains critères . Une exigence courante consiste à garantir que des colonnes spécifiques contiennent des valeurs uniques. Ceci est particulièrement utile lorsqu'il s'agit de tables qui stockent des données telles que des comptes d'utilisateurs ou des listes de produits.
Dans votre cas, vous disposez d'une table appelée serveurs avec deux colonnes, adresse IP et nom d'hôte. Vous voulez vous assurer que la combinaison de l'adresse IP et du nom d'hôte est unique. Pour y parvenir, vous pouvez utiliser la règle Rule::unique de Laravel.
L'exemple suivant montre comment implémenter la règle de validation :
<code class="php">use Illuminate\Validation\Rule; $messages = [ 'data.ip.unique' => 'Given ip and hostname are not unique', ]; Validator::make($data, [ 'data.ip' => [ 'required', Rule::unique('servers') ->where(function ($query) use ($ip, $hostname) { return $query->where('ip', $ip) ->where('hostname', $hostname); }), ], ], $messages);</code>
Cette règle de validation vérifiera si la combinaison des à condition que l'adresse IP et le nom d'hôte existent déjà dans la table des serveurs. Si tel est le cas, la validation échouera et un message d'erreur sera généré.
En personnalisant la fermeture Where, vous pouvez affiner davantage le contrôle d'unicité. Par exemple, vous pouvez exclure l'enregistrement actuel en cours de mise à jour en utilisant la propriété $this->id :
<code class="php">Rule::unique('servers') ->where(function ($query) use ($ip, $hostname) { return $query->where('ip', $ip) ->where('hostname', $hostname) ->where('id', '!=', $this->id); }),</code>
Cette modification garantit que la validation ne prendra en compte que les autres enregistrements de la table et non l'enregistrement actuel. .
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!