前回まで状況はこちら。
最新ソースコードはこちら。
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
うまくできました。
もう少しでこの課題は完成ですね。
バナークリックで応援よろしくお願いします。