簡體   English   中英

Laravel:如何避免時間重疊?

[英]Laravel : how to avoid time overlapping?

我正在構建一個laravel控制器,試圖避免時間重疊。 但是我遇到查詢問題,因為我無法在控制器中正確運行查詢:

public function postAllocateRoom(Request $request)
    {

            $classRoom = new ClassRoom();  

            $classRoom->department_id=$request->Input(['department_id']);     
            $classRoom->room_id=$request->Input(['room_id']); 
            $classRoom->course_id=$request->Input(['course_id']); 
            $classRoom->day_id=$request->Input(['day_id']);
            $classRoom->start=Carbon::parse(str_replace(array('am', 'pm'), ':00', $request->input('start')));
            $classRoom->end=Carbon::parse(str_replace(array('am', 'pm'), ':00', $request->input('end')));
            $day = $classRoom->day_id;
            $startTime=$classRoom->start;
            $endTime=$classRoom->end;

        $result=DB::select( DB::raw("SELECT * FROM `allocate_rooms`
         WHERE  start='$startTime' AND end='$endTime' AND  day_id='day'"));
                  if (sizeof($result)>0) {
                 flash()->error('Class Room Already Taken.');
             return redirect('allocateRoomPage');
                    }
            else { 
                 $classRoom->save();  
                   flash()->success('Successfully allocated room.');          
                 return redirect('allocateRoomPage');  
            }                  
    }

在我的控制器查詢中,我首先將檢查輸入給定的day_id是否與具有該day_id的數據庫匹配,然后將與時間進行檢查,如果匹配則結果將不止一個,因此不能讓用戶保存輸入,否則如果查詢失敗,它將使用戶保存數據。

我面臨查詢問題。 如果有任何幫助找出解決方案。

首先,我建議您在創建模型實例之前對輸入進行一些驗證 然后,我不明白為什么有時使用$request->Input(['input_name'])有時有時使用$request->input('input_name') ,所以最好使用第二種語法。

我編輯了您的代碼,請對其進行測試,它應該可以正常工作。

public function postAllocateRoom(Request $request)
    {
            // SOME VALIDATION HERE BEFORE GO ON, PLEASE

            $startTime = Carbon::parse(str_replace(array('am', 'pm'), ':00', $request->input('start')));
            $endTime = Carbon::parse(str_replace(array('am', 'pm'), ':00', $request->input('end')));
            $dayId = $request->input('day_id');

            $timeExists = AllocateRooms::where('day_id', $dayId)
                                                ->where('start', $startTime)
                                                ->where('end', $endTime)
                                                ->exists(); //use allocate_rooms table model (I don't know if it is ClassRomm)

            if($timeExists){
                reuturn redirect('allocateRoomPage')->withErrors(['time' => 'Class Room Already Taken']);
            }

            $classRoom = new ClassRoom();  
            $classRoom->department_id=$request->input('department_id');     
            $classRoom->room_id=$request->input('room_id'); 
            $classRoom->course_id=$request->input('course_id'); 
            $classRoom->day_id=$dayId;
            $classRoom->start=$startTime;
            $classRoom->end=$endTime;
            $classRoom->save();

            $request->session()->flash('success', 'Successfully allocated room');

            return redirect('allocateRoomPage'); 


    }

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM