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...
}
説明
結論
カスタムの where 条件で Rule::unique ルールを利用することで、Laravel の複数の列にわたる一意性を効果的に確保できます。このアプローチにより、特に最初のクエリで述べたようなシナリオを考慮する場合、より具体的で柔軟なデータ検証が可能になります。
免責事項: 提供されるすべてのリソースの一部はインターネットからのものです。お客様の著作権またはその他の権利および利益の侵害がある場合は、詳細な理由を説明し、著作権または権利および利益の証拠を提出して、電子メール [email protected] に送信してください。 できるだけ早く対応させていただきます。
Copyright© 2022 湘ICP备2022001581号-3