Тестирование переменной на 3 таблицах в Laravel

#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. Спасибо за решение и не забуду перехватывать исключения в будущем!