Comment valider l'unicité de plusieurs colonnes dans Laravel ?

Linda Hamilton
Libérer: 2024-10-31 10:10:02
original
293 Les gens l'ont consulté

How to Validate Multiple Columns for Uniqueness in Laravel?

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>
Copier après la connexion

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>
Copier après la connexion

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!

source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal