Laravel での複数の列の一意性の検証
Laravel の検証システムは、アプリケーションに送信されるデータが特定の基準を満たしていることを確認する便利な方法を提供します。一般的な要件の 1 つは、特定の列に一意の値が含まれていることを確認することです。これは、ユーザー アカウントや製品リストなどのデータを保存するテーブルを扱う場合に特に便利です。
あなたの場合、ip と hostname の 2 つの列を持つservers というテーブルがあります。 IP とホスト名の組み合わせが一意であることを確認したいと考えています。これを実現するには、Laravel の Rule::unique ルールを使用できます。
次の例は、検証ルールを実装する方法を示しています。
<code class="php">use Illuminate\Validation\Rule; $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 とホスト名はサーバー テーブルにすでに存在します。存在する場合、検証は失敗し、エラー メッセージが生成されます。
where クロージャをカスタマイズすることで、一意性チェックをさらに調整できます。たとえば、$this->id プロパティを使用して、更新中の現在のレコードを除外できます。
<code class="php">Rule::unique('servers') ->where(function ($query) use ($ip, $hostname) { return $query->where('ip', $ip) ->where('hostname', $hostname) ->where('id', '!=', $this->id); }),</code>
この変更により、検証では現在のレコードではなく、テーブル内の他のレコードのみが考慮されるようになります。 .
以上がLaravelで複数の列の一意性を検証する方法は?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。