Laravel: 独自の検証ルールによるモデルの更新
Laravel では、モデルの更新中にフィールドを検証することは、データの整合性を確保するために重要です。ただし、固有の検証ルールにより、既存のレコードを更新するときに問題が発生する可能性があります。
リポジトリ クラスで次のコードを検討してください。
<code class="php">public function update($id, $data) { $user = $this->findById($id); $user->fill($data); $this->validate($user->toArray()); $user->save(); return $user; }</code>
このコードは、次のような固有のフィールドを含む、モデルのフィールドを再検証しようとします。 「ユーザー名」と「メールアドレス」。ただし、このアプローチでは、既存の一意の値でレコードを更新しようとすると検証エラーが発生する可能性があります。
この問題を解決するには、一意の制約に違反せずに更新できるように、検証から現在のレコードを除外する必要があります。これは、更新されるインスタンスの ID をバリデーターに追加することで実現できます。方法は次のとおりです:
インスタンスの ID を渡します:
更新されるインスタンスの ID を更新メソッドに渡します:
<code class="php">public function update($id, $data) { $user = $this->findById($id); $user->fill($data); $this->validate($user->toArray(), ['id' => $id]); $user->save(); }</code>
現在のレコードを検証から除外します:
バリデーターでは、id パラメーターを使用してリソースを更新しているか作成しているかを検出します:
更新中: 一意の検証ルールの場合は、ルールに ,{$id} を追加して、現在のレコードを除外します。例:
<code class="php">'email' => 'unique:users,email,{$id}',</code>
作成: 一意の検証ルールの場合は、ID を含めないでください。例:
<code class="php">'email' => 'unique:users,email',</code>
これらの手順に従うことで、固有の検証制約が確実に尊重されるようにしながら、Laravel モデルをエレガントに更新できます。
以上がエラーを発生させずに独自の検証ルールを使用して Laravel モデルを更新するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。