#php #laravel
#php #laravel
Вопрос:
мне трудно заставить этот блок кода работать:
public function verifyPayment(Request $request)
{
$transaksie = Transaksie::where('trans_nommer', $request->trans_nommer)->firstOrFail();
$transaksie->is_paid = 4;
$transaksie->save();
// Notify user that transaction was successfull
$transaksie->user->notify(new PaymentVerified($transaksie));
// Merk die sertifikaat as verkoop
if($request->sert_nommer >= 1003333) {
$sertifikaat = Alternate::where('sert_nommer', $request->sert_nommer)->firstOrFail();
$sertifikaat->is_paid = 4;
$sertifikaat->save();
}elseif($request->sert_nommer <= 1003604) {
$sertifikaat = Share::where('sert_nommer', $request->sert_nommer)->firstOrFail();
$sertifikaat->is_paid = 4;
$sertifikaat->save();
}elseif($request->sert_nommer <= 50000) {
$sertifikaat = Aandeel::where('sert_nommer', $request->sert_nommer)->firstOrFail();
$sertifikaat->is_paid = 4;
$sertifikaat->save();
}
// Notify seller that transaction was approved
$sertifikaat->user->notify(new BetalingSuccess($sertifikaat));
$sertifikate = Alternate::orderBy('id','DESC')->first();
$old_sert = $sertifikate->sert_nommer;
$aandeel_sert = $old_sert 1;
$transaksie->user->alternates()->create([
'sert_nommer' => $aandeel_sert,
'user_id' => $transaksie->user->lid_nommer,
'aantal_aandele' => $transaksie->aandele,
'nfc_bedrag' => $transaksie->nfc,
'status_id' => 3,
'is_paid' => 2,
]);
$alt_sertifikate = Alternate::orderBy('id', 'DESC')->first();
$tweede_sertifikaat = $alt_sertifikate->sert_nommer;
$nfc_sert = $tweede_sertifikaat 1;
$transaksie->user->alternates()->create([
'sert_nommer' => $nfc_sert,
'user_id' => $transaksie->user->lid_nommer,
'aantal_aandele' => $transaksie->aandele,
'nfc_bedrag' => $transaksie->nfc,
'status_id' => 3,
'is_paid' => 2,
]);
// Notify user van nuwe sertifikaate en stuur mail deur queue
$user = $transaksie->user;
dispatch(new StuurSertifikate($aandeel_sert,$nfc_sert,$transaksie,$user))->onQueue('emails');
return redirect()->back()->with('success','Betaling was geverifieer!');
}
Чего я пытаюсь добиться, так это того, что $request-> sert_nommer должен проверять, находится ли она в таблице Alternates, таблице Share или таблице Aandeel. Весь этот код работает на моем локальном сервере без ошибок, но когда я тестирую это на своем производственном сервере, я получаю 404, когда он достигает этой части запроса
Комментарии:
1. проверьте, есть ли какие-либо данные на реальном сервере
2. Данные есть во всех трех таблицах
3. Нет причин для выдачи ошибки 404 в этих строках. Что вы пытались сделать для дальнейшего устранения этой проблемы?
4. Я использовал telescope, но информации не так много, когда я просматриваю 404, все выглядит нормально… позвольте мне опубликовать всю функцию целиком, возможно, проблема в другом
Ответ №1:
Немного измените свой запрос, и он должен сработать (не тестировался):
if($request->sert_nommer >= 1003333) {
$sertifikaat = Alternate::where('sert_nommer', $request->sert_nommer)->first();
if($sertifikaat){
$sertifikaat->is_paid = 4;
$sertifikaat->save();
}
}elseif($request->sert_nommer <= 1003604) {
$sertifikaat = Share::where('sert_nommer', $request->sert_nommer)->first();
if($sertifikaat){
$sertifikaat->is_paid = 4;
$sertifikaat->save();
}
}elseif($request->sert_nommer <= 50000) {
$sertifikaat = Aandeel::where('sert_nommer', $request->sert_nommer)->first();
if($sertifikaat){
$sertifikaat->is_paid = 4;
$sertifikaat->save();
}
}
Методы findOrFail и firstOrFail извлекут первый результат запроса; однако, если результат не найден, будет вызвано исключение IlluminateDatabaseEloquentModelNotFoundException. Если исключение не перехвачено, пользователю автоматически отправляется HTTP-ответ 404.
Более подробную информацию смотрите в официальном документе
Комментарии:
1. Спасибо за решение и не забуду перехватывать исключения в будущем!