2016-05-12 5 views
0

私は時間の重複を避けようとしているララベルコントローラを構築しています。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をチェックし、それが時間と一致するかどうかをチェックします。結果が複数になると、ユーザーは入力を保存できません。そうでなければ、クエリが失敗した場合、ユーザーはデータを保存できます。

私は質問に直面しています。いずれかが解決策を見つけるのに役立つ場合。

+0

質問にはどのような問題がありますか?正確なエラーメッセージを投稿してください。 – codedge

答えて

1

まず、モデルインスタンスを作成する前に入力にvalidationsを実行することをお勧めします。 次に、$request->Input(['input_name'])を使用する理由と$request->input('input_name')を使用する理由がわからないので、2番目の構文を使用する方がよいでしょう。

コードを編集しました。テストしてください。うまくいくはずです。

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'); 


    } 
関連する問題