У меня 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');
}
}






Конечно — просто добавьте проверку 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');
}
}
Нет, я забыл поставить точку с запятой после first() в строке выше. должно быть ->first(); Попробуйте это.
Спасибо за помощь... Но у меня сообщение об ошибке
syntax error, unexpected 'if' (T_IF)?? может этоif (!isset($payment)){??