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

前回までの状況はこちら。

最新ソースはこちら。

https://github.com/takishita2nd/hotel-mng

今回も内容薄いかもしれん。

今までは予約登録時、日にちが重複していればエラーを表示させていました。

これが通用するのは部屋が一つしか無い場合のみでして、

今回は部屋が複数あるので、日にちだけのチェックだけではなくて、部屋もチェックに含めなければいけません。

というわけで、引数に部屋IDを追加。

    /**
     * 登録処理
     */
    public function store(ManagementRequest $request)
    {
        if($this->registerManagement->checkSchedule($request->start_day, 
                                                    $request->days, 
                                                    $request->room) == false)
        {
            return redirect('management/create')
                        ->with(['error' => 'スケジュールが重複します'])
                        ->withInput();
        }
    /**
     * 更新処理
     */
    public function update(ManagementRequest $request)
    {
        if($this->registerManagement->checkScheduleForUpdate($request->start_day, 
                                                            $request->days, 
                                                            $request->id, 
                                                            $request->room) == false)
        {
            return redirect('management/create')
                        ->with(['error' => 'スケジュールが重複します'])
                        ->withInput();
        }

そしてチェック処理本体。

    /**
     * スケジュールの重複を確認する
     * 
     * @return boolean
     */
    public function checkSchedule($date, $num, $room)
    {
        for($i = 0; $i < $num; $i++)
        {
            $record = ReserveDayList::where(['day' => date('Y-m-d', strtotime($date.'+'.$i.' day'))])->first();
            if(is_null($record) == false)
            {
                if($record->reserveManagements()->first()->rooms()->first()->id == $room)
                {
                    return false;
                }
            }
        }

        return true;
    }
    /**
     * 更新時のスケジュールの重複を確認する
     * 
     * @return boolean
     */
    public function checkScheduleForUpdate($date, $num, $userId, $room)
    {
        for($i = 0; $i < $num; $i++)
        {
            $model2 = ReserveDayList::where(['day' => date('Y-m-d', strtotime($date.'+'.$i.' day'))])->first();
            if(is_null($model2) == false)
            {
                if($model2->reserveManagements()->first()->rooms()->first()->id == $room)
                {
                    if($model2->reserveManagements()->first()->id != $userId)
                    {
                        return false;
                    }
                }
            }
        }

        return true;
    }

strtotime($date.’+0 day’)ってできたんだ。

やってることは部屋チェックを追加しただけです。

簡単ですね。

これで、日付は同じだけど部屋が違う場合は予約可、日付と部屋が同じ場合は予約不可、というロジックが完成しました。

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

コメントを残す

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

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