ホームページ  >  記事  >  バックエンド開発  >  Laravelで複数の列にわたって一意の検証を強制する方法は?

Laravelで複数の列にわたって一意の検証を強制する方法は?

DDD
DDDオリジナル
2024-10-30 06:35:02252ブラウズ

How to Enforce Unique Validation Across Multiple Columns in Laravel?

Laravel: 複数のテーブル列にわたる一意の検証の実現

組み合わせが一意である必要がある複数の列を含むテーブルを含むデータベースがあるシナリオの場合、Laravel アプリケーションでこの一意性制約を強制する必要があります。

そのような例の 1 つは、「ip」列と「hostname」列を持つ「servers」テーブルです。個々の 'ip' または 'hostname' の値が複数回出現する可能性がある場合でも、特定の 'ip' と 'hostname' の組み合わせが一意であることを確認したいとします。

ルールを使用した解決策:: unique()

この検証を実装するには、Rule::unique メソッドを利用します。このメソッドを使用すると、特定の列セットにカスタムの一意のルールを指定できます。以下に例を示します。

<code class="php">$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>

説明

  • 「where()」クロージャーを使用すると、一意性ルールに追加の制約を定義できます。この場合、検証が失敗するには「ip」列と「hostname」列の両方が一致する必要があることが指定されています。
  • 「unique()」メソッドを使用すると、一意のルールを適用するテーブルを指定できます。 。この場合、それは「servers」テーブルです。
  • 「required」ルールにより、ユーザーが「ip」値を指定することが保証されます。
  • 「messages」配列は、次の場合に表示されるエラー メッセージをカスタマイズします。検証は失敗します。

このルールを実装すると、アプリケーションが 'servers' テーブルで 'ip' と 'hostname' の重複した組み合わせを確実に禁止することができます。

以上がLaravelで複数の列にわたって一意の検証を強制する方法は?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。