GmailのEメールアドレス、Facebookのログイン、銀行の口座番号、などなど・・世の中どこに行っても必要なIDの情報。この情報に重複があったら困りますね。
このIDとなる情報を登録するプロセス、まずは入力バリデーション、次にDBでレコード作成時の重複DBエラーを利用しての2ステップで重複を回避します。
今回は、入力バリデーションを使って:
public function postSignup(Request $request) { $rules = [ 'email' => 'required|email|unique:member,email', 'password' => 'required|min:6|max:20|confirmed', 'first_name' => 'required', 'last_name' => 'required' ]; $messages = [ 'email.unique' => "Eメールアドレスはすでに使用されています" ]; $this->validate($request, $rules, $messages); $member = Member::create($request->all()); }
重複をチェックしてくれるのは、unique:member,email
のルールです。「DBテーブル member の email には同じ情報があってはいけません」というルールです。
すでにDBに存在するEメールを入力したなら、DBに値を保存せずに、入力画面へ戻りエラー「Eメールアドレスはすでに使用されています」を表示してくれます。
それを行ってくれるのが次の1行:
$this->validate($request, $rules, $messages);
しかし、シンプルすぎて逆にわかりにくいかもしれません。そう思うなら、ララベルバージョン4のように、以下とも書くことできます。
$validator = Validator::make($request->all(), $rules, $messages) if ($validator->fails()) { return back()->withErrors($validator)->$withInput(); }
さて、重複回避は、このチェックだけで十分でしょうか?
次回は、DBレベルでの重複回避の紹介をします。
メルマガ購読の申し込みはこちらから。