ホームページ  >  記事  >  バックエンド開発  >  ## Laravel で独自の検証ルールを使用してモデルをエラーなく更新するにはどうすればよいですか?

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

Patricia Arquette
Patricia Arquetteオリジナル
2024-10-25 07:32:28543ブラウズ

## How to Update Models with Unique Validation Rules in Laravel Without Errors?

Laravel: 独自の検証ルールを使用したモデルの更新

Laravel でモデルを更新する場合、検証を通じてデータの整合性を確保することが重要です。ただし、ユーザー名や電子メールなどの属性に対する独自の検証ルールは課題を引き起こす可能性があります。

問題ステートメント

ユーザー名と電子メールに独自の検証ルールがある仮想の User モデルでは、リポジトリを使用してレコードを更新すると、検証エラーが発生する可能性があります:

public function update($id, $data) {
    $user = $this->findById($id);
    $user->fill($data);
    $this->validate($user->toArray());
    $user->save();
    return $user;
}

これはテストに失敗し、次の結果が返されます:

ValidationException: {"username":["The username has already been taken."],"email":["The email has already been taken."]}

解決策: 現在のインスタンスの一意のルールを無視する

この問題に適切に対処するには、更新中の現在のインスタンスに対して一意の検証ルールを無視できます。

  1. インスタンス ID をバリデーターに渡します。

    リポジトリ メソッドで、更新されるインスタンスの ID を validate メソッドに渡します。

  2. バリデーターでパラメーターを使用して、以下を区別します。作成と更新:

    検証ルールに、操作が更新であるか作成であるかを示すパラメーターを追加します。

更新のルール:

一意のルールで現在の ID を無視するように強制します:

'email' => 'unique:users,email_address,' . $userId,

作成ルール:

通常どおりに続行します。固有のルール:

'email' => 'unique:users,email_address',

これらの変更を組み込むことで、既存のレコードの更新を妨げることなく固有の検証ルールを適用できます。

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

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。