Я использую Laravel 6. Я создал форму для обновления собрания, а также некоторые правила проверки в контроллере, которые проверяют, свободна ли комната в это время и если участники уже заняты в другой встрече в это время. К сожалению, когда я отправляю форму и меняю, например, только описание собрания, процесс проверки не работает должным образом, потому что он говорит, что текущая комната уже занята, а также участники уже заняты в другой встрече вв это время ... это происходит потому, что процесс проверки не исключает проверки текущего идентификатора собрания. Таким образом, собрание является дубликатом самого себя.
Я пытался многими способами изменить метод проверки, исключая $ id, переданный в качестве второго аргумента функции update_meeting, но они не работали.
Контроллер:
public function update_meeting(Request $request, $id)
{
$this->validate($request, [
'participants' => [ 'required', new CheckParticipant() ],
'description' => 'required',
'room' => [ 'required', new CheckRoom() ],
'date_meeting' => [ 'required', new CheckDateTime() ],
'start' => [ 'required', new CheckTime() ],
'end' => 'required',
]);
$meeting = Meeting::find($id);
$participants = request('participants');
$meeting->id_participants = implode(';', $participants);
$meeting->description = request('description');
$meeting->id_room = request('room');
$meeting->date = request('date_meeting');
$meeting->start_hour = request('start');
$meeting->end_hour = request('end');
$meeting->save();
$message_correct = "The meeting has been correctly updated!";
return redirect()->route('home')->with('success', $message_correct);
}
Пользовательское правило (CheckRoom):
public function passes($attribute, $value)
{
$meetings = DB::table('meetings')
->where('id_room', request('room'))
->where('date', request('date_meeting'))
->where(function ($query) {
$query->where(function($sub_q) {
$sub_q->where('start_hour', '>=', request('start'))
->where('start_hour', '<', request('end'));
})
->orWhere(function($sub_q) {
$sub_q->where('start_hour', '<', request('start'))
->where('end_hour', '>=', request('end'));
})
->orWhere(function($sub_q) {
$sub_q->where('end_hour', '>', request('start'))
->where('end_hour', '<=', request('end'));
});
})->get();
if(count($meetings) > 0) {
return false;
} else {
return true;
}
}
Есть ли способ игнорировать текущий идентификатор в методе validateили я должен изменить правило, исключая идентификатор в запросе?