Laravel ограничивает количество отправлений до 1

Возникла проблема с моей частью веб-приложения, которое я создаю. Суть в том, что если пользователь намерен создать дату отъезда (если она у него уже есть), чтобы отобразить сообщение об ошибке, подобное этому: «Ой, вы уже указали дату отъезда. Удалите ранее установленную дату отъезда, чтобы назначить новый! "

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

Это не вопрос. Но я думаю, вам нужно ограничение unique

online Thomas 07.06.2018 13:50

Да, на самом деле я хотел спросить следующее: у пользователя может быть только одна дата отъезда. И как только он создает другую дату отъезда (пока она существует), чтобы отобразить сообщение об ошибке, что у него уже есть одна

user8074599 07.06.2018 14:25
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Symfony Station Communiqué - 7 июля 2023 г
Symfony Station Communiqué - 7 июля 2023 г
Это коммюнике первоначально появилось на Symfony Station .
Оживление вашего приложения Laravel: Понимание режима обслуживания
Оживление вашего приложения Laravel: Понимание режима обслуживания
Здравствуйте, разработчики! В сегодняшней статье мы рассмотрим важный аспект управления приложениями, который часто упускается из виду в суете...
Установка и настройка Nginx и PHP на Ubuntu-сервере
Установка и настройка Nginx и PHP на Ubuntu-сервере
В этот раз я сделаю руководство по установке и настройке nginx и php на Ubuntu OS.
Коллекции в Laravel более простым способом
Коллекции в Laravel более простым способом
Привет, читатели, сегодня мы узнаем о коллекциях. В Laravel коллекции - это способ манипулировать массивами и играть с массивами данных. Благодаря...
Как установить PHP на Mac
Как установить PHP на Mac
PHP - это популярный язык программирования, который используется для разработки веб-приложений. Если вы используете Mac и хотите разрабатывать...
0
2
45
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Для этого вы можете создать собственное правило проверки (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'],
]);

Другие вопросы по теме