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

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

Linda Hamilton
Linda Hamiltonオリジナル
2024-11-01 12:18:30759ブラウズ

How to Validate Uniqueness Across Multiple Columns in Laravel?

Laravel での複数の列の一意性の検証

Laravel でデータを検証する場合、重複エントリを防ぐために複数の列にわたる一意性を確保することが重要です。これは、IP 列とホスト名の両方の列の一意性を考慮する必要がある前述のケースなど、値の複数の組み合わせが一意である必要があるシナリオに特に関連します。

複数列の一意の検証

複数の列の一意性を検証するために、Laravel は Rule::unique ルールを提供します。このルールを使用すると、検証中に考慮するテーブルと列を指定できます。

カスタマイズされた検証ルール

指定されたシナリオでは、目標は、次のことを考慮して ip フィールドを検証することです。 ip 列と hostname 列の両方。これを実現するには、次のようなカスタム ルールを使用できます。

<code class="php">use Illuminate\Validation\Rule;

$data = [
    'ip' => '192.168.0.1',
    'hostname' => 'server-1',
];

$messages = [
    'data.ip.unique' => 'Given ip and hostname are not unique',
];

Validator::make($data, [
    'ip' => [
        'required',
        Rule::unique('servers')
            ->where(function ($query) use ($ip, $hostname) {
                return $query->where('ip', $ip)->where('hostname', $hostname);
            }),
    ],
], $messages);

if ($validator->fails()) {
    // Handle validation errors...
}</code>

説明

  • rule::unique ルールはサーバー テーブルを指定します。これには、ip 列と hostname 列が含まれます。
  • ルール内の where クロージャーは、一意性のために満たす必要がある条件を定義します。この場合、IP とホスト名の両方がデータベース内の既存のレコードと一致するかどうかがチェックされます。
  • カスタム エラー メッセージ「Given ip and hostname are not unique」は、data.ip.unique 検証ルールに関連付けられています。

結論

カスタムの where 条件で Rule::unique ルールを利用することで、Laravel の複数の列にわたる一意性を効果的に確保できます。このアプローチにより、特に最初のクエリで述べたようなシナリオを考慮する場合、より具体的で柔軟なデータ検証が可能になります。

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

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