Laravel - Добавление проверки даты в режиме редактирования - PullRequest
3 голосов
/ 26 февраля 2020

У меня есть две таблицы - «Поездки» и «События». Одна поездка может иметь много событий. У меня есть форма, которая позволяет пользователям добавлять события в свою поездку. У меня также есть форма, которая позволяет пользователям редактировать событие.

Я добавил проверку при добавлении и события. Событие может быть добавлено только в том случае, если дата начала и дата окончания события находятся в пределах даты начала поездки и даты окончания поездки.

Однако я не могу получить такую ​​же проверку при редактировании Посмотреть. Используя тот же код, что и мое добавление, в моем редактировании, если пользователь изменяет тайтл события, но не изменяет время начала / окончания события, появляется сообщение об ошибке даты, даже если даты находятся в поездке.

EventController - добавить работающую функцию

public function addEvent(Request $request)
{
  $this->validate($request, [
    'event_name'  => 'required',
    'start_date'  => 'required',
    'end_date'    => 'required',
    'time'        => 'required',
    'trip_id'     => 'required',

  ]);

    $start_date = Carbon::parse($request['start_date'])->format('Y-m-d');
    $end_date = Carbon::parse($request['end_date'])->format('Y-m-d');

    $tripCheck = Trip::where('id', $request['trip_id'])
    ->whereDate('startdate', '<=', $start_date)
    ->whereDate('enddate', '>=', $start_date)

    ->whereDate('startdate', '<=', $end_date)
    ->whereDate('enddate', '>=', $end_date)
    ->first();

    if ($tripCheck) {

      $events = new Events;
      $trips = Trip::all();
      $categories = Categories::pluck('category','id');
      $events->category_id = $request['category_id'];
      $events->colour =  $request['colour'];
      $events->event_name = $request['event_name'];
      $events->start_date = $request['start_date'];
      $events->end_date = $request['end_date'];
      $events->time = $request['time'];
      $events->address = $request['address'];
      $events->notes = $request['notes'];
      $events->trip_id = $request['trip_id'];
      $events->save();

return redirect('trips')->with('success', 'The new event has been added to your trip')->with('trips', $trips)->withCategories($categories);
} else
  {
  return redirect('trips')->withErrors(['The dates you added are not within Trip start and end date.']);
   }

}

Не работает функция редактирования контроллера событий

public function edit($id)
{
  $events = Events::find($id);
  $categories = Categories::pluck('category','id');
  return view ('editEventForm')->with('events', $events)->withCategories($categories);
}

public function update(Request $request, $id)
{
    $this->validate($request, [
      'category_id' => 'required',
      'event_name' => 'required',
      'start_date' => 'required',
      'end_date' => 'required',
    ]);

    $start_date = Carbon::parse($request['start_date'])->format('Y-m-d');
    $end_date = Carbon::parse($request['end_date'])->format('Y-m-d');

    $tripCheck = Trip::where('id', $request['trip_id'])
    ->whereDate('startdate', '<=', $start_date)
    ->whereDate('enddate', '>=', $start_date)

    ->whereDate('startdate', '<=', $end_date)
    ->whereDate('enddate', '>=', $end_date)
    ->first();

    if($tripCheck) {

    //Update Event
    $events = Events::find($id);
    $events->category_id = $request['category_id'];
    $events->colour =  $request['colour'];
    $events->event_name = $request['event_name'];
    $events->start_date = $request['start_date'];
    $events->end_date = $request['end_date'];
    $events->time = $request['time'];
    $events->address = $request['address'];
    $events->notes = $request['notes'];
    $events->save();

    return redirect('trips')->with('success', 'Event Updated');
} else {
    return redirect('trips')->withErrors(['The dates you added are not within Trip start and end date.']);
}

}

trip.blade. php

<div class="form-group">
      <input type="text" name="destination" class="form-control" value="{{$trip->destination}}" placeholder="Destination" />
    </div>
    <h7>Trip Start Date: </h7>
    <div class="form-group">
      <input type="date" name="startdate" class="form-control" value="{{$trip->startdate}}" placeholder="Start Date" />
    </div>
    <h7>Trip End Date: </h7>
    <div class="form-group">
      <input type="date" name="enddate" class="form-control" value="{{$trip->enddate}}" placeholder="End Date" />
    </div>
    <div>

контроллер отключения

public function submit(Request $request){
  $this->validate($request, [
    'name'          => 'required',
    'email'         => 'required',
    'destination'   => 'required',
    'startdate'     => 'required',
    'enddate'       => 'required'
  ]);

  //Create new trips
  $trip = new Trip;
  $trip->name = $request->input('name');
  $trip->email = $request->input('email');
  $trip->destination = $request->input('destination');
  $trip->startdate = $request->input('startdate');
  $trip->enddate = $request->input('enddate');
  $trip->user_id = auth()->user()->id;

  //save trips
  $trip->save();

  //Rredirect
  return redirect('/home')->with('status', 'Trip Created Sucessfully');

}

1 Ответ

0 голосов
/ 26 февраля 2020

Метод update ищет $request['trip_id'], существует ли он? Это не требуется проверка, как в методе create.

Это в форме обновления?

Также дополнительный совет, вы можете упростить большую часть кода с помощью create и fill для объектов модели.

ie: $trip = Trip::create($request->input()); при условии, что имена входных данных соответствуют модели, а входные данные чистые.

...