【Laravel】スケジュールの重複をチェックする

前回まで状況はこちら。

最新ソースコードはこちら。

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

うまくできました。

もう少しでこの課題は完成ですね。

バナークリックで応援よろしくお願いします。

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください