Возникла проблема с моей частью веб-приложения, которое я создаю. Суть в том, что если пользователь намерен создать дату отъезда (если она у него уже есть), чтобы отобразить сообщение об ошибке, подобное этому: «Ой, вы уже указали дату отъезда. Удалите ранее установленную дату отъезда, чтобы назначить новый! "
DepartureController.php
public function store(Request $request)
{
$request->validate([
'departure_date' => 'required|date|after:yesterday',
'location' => 'required|max:1|integer|',
]);
$date = Carbon::parse($request->departure_date);
$LocationUsers = new LocationUser();
$LocationUsers->user_id = request()->user()->id;
$LocationUsers->departure_date = $date;
$LocationUsers->location_id = $request->location;
$LocationUsers->save();
session()->flash('success', 'Departure added succesfully!');
return redirect('departure/create');
}
И модель пользователя
public function daysUntilDeparture()
{
if ($this->location()->count() < 1) {
return "No departure date has been given";
}
$location = $this->location[0];
$userLocation = LocationUser::where('user_id', $this->id)
->where('location_id', $location->id)
->first();
$departure_date = $userLocation->departure_date;
return $departure_date->diffInDays(Carbon::now());
}
Да, на самом деле я хотел спросить следующее: у пользователя может быть только одна дата отъезда. И как только он создает другую дату отъезда (пока она существует), чтобы отобразить сообщение об ошибке, что у него уже есть одна






Для этого вы можете создать собственное правило проверки (https://laravel.com/docs/5.6/validation#custom-validation-rules)
Например, ваше правило может выглядеть так:
use Illuminate\Contracts\Validation\Rule;
class CurrentDeparture implements Rule
{
/**
* Determine if the validation rule passes.
*
* @param string $attribute
* @param mixed $value
* @return bool
*/
public function passes($attribute, $value)
{
return is_null(LocationUser::where('user_id', request()->user()->id)->first());
}
/**
* Get the validation error message.
*
* @return string
*/
public function message()
{
return 'Uh oh, you have already made a departure date. Delete the previously made departure date to assign a new one!';
}
}
И ваша проверка будет:
$request->validate([
'departure_date' => [new CurrentDeparture, 'required', 'date', 'after:yesterday'],
]);
Это не вопрос. Но я думаю, вам нужно ограничение
unique