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