Добавить тренировку после оплаты

У меня 3 формы, первая форма students с 2 полями (имя, имя)

Добавить тренировку после оплаты

Затем у нас есть форма payments с 3 полями (date_encoding, price, fk_student)

Добавить тренировку после оплаты

И, наконец, последняя форма trainings с 3 полями (date_sitting, fk_student, fk_payment).

Моя проблема форма тренинги, я могу создать новую запись без оплаты студента.

Добавить тренировку после оплаты

Можно ли заблокировать запись с сообщением об ошибке в форме обучения?

Вот идея моего кода на данный момент.

public function store(Request $request)
    {
        $request->validate([
                'date_sitting' => 'required|date',
                'fk_student' => 'required',
                'fk_payment' => 'required'

        ]);

        $exists = Training::where('date_sitting', $request->get('date_sitting'))->where('fk_student', $request->get('fk_student'))->where('fk_payment', $request->get('fk_payment'))->count();

       if (!$exists){
            Training::create($request->all());
            return redirect()->route('trainings.index')
                ->with('success', 'new data created successfully');
        }

        else{
            return redirect()->route('trainings.index')
                ->with('error', 'duplicate');

        }   
    }
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Оживление вашего приложения Laravel: Понимание режима обслуживания
Оживление вашего приложения Laravel: Понимание режима обслуживания
Здравствуйте, разработчики! В сегодняшней статье мы рассмотрим важный аспект управления приложениями, который часто упускается из виду в суете...
Коллекции в Laravel более простым способом
Коллекции в Laravel более простым способом
Привет, читатели, сегодня мы узнаем о коллекциях. В Laravel коллекции - это способ манипулировать массивами и играть с массивами данных. Благодаря...
Поиск нового уровня в Laravel с помощью MeiliSearch и Scout
Поиск нового уровня в Laravel с помощью MeiliSearch и Scout
Laravel Scout - это популярный пакет, который предоставляет простой и удобный способ добавить полнотекстовый поиск в ваше приложение Laravel. Он...
Освоение архитектуры микросервисов с Laravel: Лучшие практики, преимущества и советы для разработчиков
Освоение архитектуры микросервисов с Laravel: Лучшие практики, преимущества и советы для разработчиков
В последние годы архитектура микросервисов приобрела популярность как способ построения масштабируемых и гибких приложений. Laravel , популярный PHP...
Как построить CRUD-приложение в Laravel
Как построить CRUD-приложение в Laravel
Laravel - это популярный PHP-фреймворк, который позволяет быстро и легко создавать веб-приложения. Одной из наиболее распространенных задач в...
1
0
45
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

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

Конечно — просто добавьте проверку if внутри блока создания. Если у пользователя нет платежа, не создавать и возвращать сообщение об ошибке. Вы можете сделать это с помощью перенаправления, как у вас есть, или вы даже можете сделать отдельную проверку через AJAX, чтобы просто увидеть, есть ли оплата, подобно проверке if, которую я добавляю ниже на $payment.

Однако, чтобы упростить и продолжить, как у вас есть, что-то вроде этого:

if (!$exists){
        // Is there a payment for the student trying to create a training?

        $payment = Payment::where('fk_student', $request->get('fk_student'))->first()

        // You may wish to add some kind of date check to see if they paid for a specific training

        if (!isset($payment)){ // No payment = block creation and return error msg.
            return redirect()->route('trainings.index')
            ->with('error', 'No Payment, no training for you!');
        }
        else{
            Training::create($request->all());
            return redirect()->route('trainings.index')
                ->with('success', 'new data created successfully');
        }
    }

Спасибо за помощь... Но у меня сообщение об ошибке syntax error, unexpected 'if' (T_IF) ?? может это if (!isset($payment)){ ??

user11124425 06.07.2019 17:54

Нет, я забыл поставить точку с запятой после first() в строке выше. должно быть ->first(); Попробуйте это.

Watercayman 06.07.2019 18:00

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