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>
説明
結論
カスタムの where 条件で Rule::unique ルールを利用することで、Laravel の複数の列にわたる一意性を効果的に確保できます。このアプローチにより、特に最初のクエリで述べたようなシナリオを考慮する場合、より具体的で柔軟なデータ検証が可能になります。
以上がLaravelで複数の列にわたる一意性を検証する方法は?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。