エラーを発生させずに独自の検証ルールを使用して Laravel モデルを更新するにはどうすればよいですか?

Patricia Arquette
リリース: 2024-10-24 19:18:30
オリジナル
640 人が閲覧しました

How to Update a Laravel Model with Unique Validation Rules Without Errors?

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 をバリデーターに追加することで実現できます。方法は次のとおりです:

  1. インスタンスの 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>
    ログイン後にコピー
  2. 現在のレコードを検証から除外します:
    バリデーターでは、id パラメーターを使用してリソースを更新しているか作成しているかを検出します:

    • 更新中: 一意の検証ルールの場合は、ルールに ,{$id} を追加して、現在のレコードを除外します。例:

      <code class="php">'email' => 'unique:users,email,{$id}',</code>
      ログイン後にコピー
    • 作成: 一意の検証ルールの場合は、ID を含めないでください。例:

      <code class="php">'email' => 'unique:users,email',</code>
      ログイン後にコピー

これらの手順に従うことで、固有の検証制約が確実に尊重されるようにしながら、Laravel モデルをエレガントに更新できます。

以上がエラーを発生させずに独自の検証ルールを使用して Laravel モデルを更新するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート