編集時を除き、Laravelフォーム要求で一意のフィールドを適用する最適な方法を探しています。最も明白な例は、電子メールアドレスを一度しか使用できないようにすることである。すなわち、システム内の各ユーザは一意の電子メールアドレスを必要とする。Laravel 5で編集するときのフォーム要求の一意のフィールド
これはユニークなフィールドを作ることによって、フォーム要求を使用して達成するためにストレートフォワードです:
public function rules()
{
return [
'email' => ['required', 'email', 'unique:users,email'],
];
}
これは、必要なフィールドを作る電子メールとして検証し、ユーザーの表で、それが一意になり。新しいユーザーを作成するのに最適です。しかし、編集はどうですか?ユーザーがプロフィールを編集して同じメールアドレスをもう一度保存したいと思うのは、まったくもっともらしいことです(これは完全に有効です)。しかし、もちろん、電子メールはすでに "使用中"なので(ユーザー自身が編集しようとしているにもかかわらず)、unique
のルールが適用されます。
'email' => ['required', 'email', 'unique:users,email,'.$userId]
しかし、どのようにユーザーIDを取得する:
Laravelは無視するuser
テーブルのIDを渡すことによって、これを回避する方法を提供していますか?ログインしたユーザーIDを取得するのは簡単ではないので、これは悪い例ですが、セッションに格納されていない他のオブジェクトはどうでしょうか? 1は、RESTを使用している場合
、そのオブジェクトのIDは、ルートを使ってURLおよび利用可能で、次のようになります。
$userId = $this->route('order');
しかし、これは非常に汚れているようです。オブジェクトを変更するためにRESTを使用していない他のインスタンスはどうですか? Laravel 5でオブジェクトを編集するときに、フォームリクエストで一意性をどのように強制しますか?