「労働者が自分の仕事をうまくやりたいなら、まず自分の道具を研ぎ澄まさなければなりません。」 - 孔子、「論語。陸霊公」
表紙 > プログラミング > Laravelで複数の列にわたる一意性を検証する方法は?

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

2024 年 11 月 7 日に公開
ブラウズ:574

How to Validate Uniqueness Across Multiple Columns in Laravel?

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

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

複数列の一意の検証 ]

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

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

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

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...
}

説明

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

結論

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

最新のチュートリアル もっと>

免責事項: 提供されるすべてのリソースの一部はインターネットからのものです。お客様の著作権またはその他の権利および利益の侵害がある場合は、詳細な理由を説明し、著作権または権利および利益の証拠を提出して、電子メール [email protected] に送信してください。 できるだけ早く対応させていただきます。

Copyright© 2022 湘ICP备2022001581号-3