2016-05-12 1 views
0

Ich habe einen Laravel Controller gebaut, wo ich Zeitüberlappungen vermeiden möchte. Aber ich bin vor Problem mit meiner Anfrage, da ich nicht die Abfrage richtig in meinem Controller laufen konnte:Laravel: Wie vermeidet man Zeitüberlappungen?

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

Hier in Abfrage meines Controller erstes werde ich prüfen, ob die day_id als Eingabe gegeben hat, ist Übereinstimmung mit Datenbank mit dass day_id und dann wird es mit der Zeit überprüfen, wenn es übereinstimmt, wird das Ergebnis mehr als eins, so kann es nicht Benutzer die Eingabe zu speichern, sonst wenn die Abfrage fehlgeschlagen ist, wird es Benutzer die Daten speichern lassen.

Ich habe ein Problem mit der Abfrage. Wenn jemand hilft, die Lösung zu finden.

+0

Also, was ist das Problem mit der Abfrage? Können Sie bitte die genaue Fehlermeldung posten? – codedge

Antwort

1

Als erstes empfehle ich Ihnen, einige validations auf Ihren Eingaben vor dem Erstellen der Modellinstanz durchzuführen. Dann verstehe ich nicht, warum Sie manchmal $request->Input(['input_name']) und manchmal $request->input('input_name') verwenden, ist es besser, die zweite Syntax zu verwenden.

Ich habe Ihren Code bearbeitet, bitte testen Sie es, es sollte funktionieren.

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


    } 
Verwandte Themen