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レベルでの重複回避の紹介をします。
メルマガ購読の申し込みはこちらから。