Laravel では、一意の検証ルールにより、指定されたデータベース列の値の一意性が保証されます。ただし、複数の列を扱う場合、それらの組み合わせの一意性を検証するのは簡単ではありません。
質問を考慮すると、servers テーブルには ip と hostname という 2 つの列があります。特定の IP 値を持つ新しいレコードが既存のホスト名値と並んでテーブルにまだ存在していないことを検証するには、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>
この検証ルールは、同じ IP とホスト名の組み合わせを持つレコードがサーバー テーブルにすでに存在するかどうかを確認します。その場合、$messages で指定されたカスタム メッセージに従ってエラー メッセージが返されます。 where クロージャを定義することで、一意性の正確な条件を指定し、ip 値と hostname 値の両方が確実に考慮されるようにすることができます。
以上がLaravelで複数の列の一意性を検証する方法は?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。