前回まで状況はこちら。
最新ソースコードはこちら。
https://github.com/takishita2nd/hotel-mng
今回は予約を入れたスケジュールに重複がないかを確認し、重複していたらエラー表示を行います。
まず、重複チェックを行う処理をリポジトリに作成します。
/** * スケジュールの重複を確認する * * @return boolean */ public function checkSchedule($date, $num) { if(ReserveDayList::where(['day' => $date])->count() != 0) { return false; } for($i = 1; $i < $num; $i++) { if(ReserveDayList::where(['day' => date('Y-m-d', strtotime($date.'+'.$i.' day'))])->count() != 0) { return false; } } return true; }
予約を入れる日にち全てに対して、データがあるかを確認します。
データの有無は、おそらく、count()でレコード数を見るのが一番スマートなやりかたでしょう。
これを、コントローラーから呼びます。
/** * 登録処理 */ public function store(ManagementRequest $request) { if($this->registerManagement->checkSchedule($request->start_day, $request->days) == false) { return redirect('management/create') ->with(['error' => 'スケジュールが重複します']) ->withInput(); } $param = $this->registerManagement->getParam(); $this->registerManagement->add([ $param[0] => $request->name, $param[1] => $request->address, $param[2] => $request->phone, $param[3] => $request->num, $param[4] => $request->days, $param[5] => $request->start_day ]); return redirect('management'); }
重複していたら、元の画面にリダイレクトします。
このとき、セッションにエラーメッセージも一緒に入れます。
withInput()を入れると、入力したデータもそのまま残るようになります。
次はbladeにエラーを表示するエリアを作成します。
@if (session('error')) <div class="alert alert-danger"> {{ session('error') }} </div> @endif
うまくできました。
もう少しでこの課題は完成ですね。
バナークリックで応援よろしくお願いします。