2016-05-12 4 views
0

У меня есть контроллер laravel, где я пытаюсь избежать перекрытия времени. Но я столкнулся с проблемой с моим запросом, как я не мог выполнить запрос должным образом в моем контроллере: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 в качестве ввода спичка с базой данных с этот день_ид, а затем он будет проверяться со временем, если он будет соответствовать результату, будет более одного, поэтому он не сможет позволить пользователю сохранить ввод иначе, если запрос не удался, он позволит пользователю сохранять данные.

У меня возникла проблема с запросом. Если кто-нибудь поможет найти решение.

+0

В чем проблема с запросом? Можете ли вы отправить точное сообщение об ошибке? – codedge

ответ

1

Прежде всего, я предлагаю вам выполнить некоторые validations на ваших входах перед созданием экземпляра модели. Тогда я не понимаю, почему вы иногда используете $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'); 


    } 
Смежные вопросы