Попытка получить свойство «id_pembelian» не-объекта

#php #laravel #laravel-5 #eloquent #laravel-8

Вопрос:

Я хочу получить данные из базы данных без использования foreach, в некоторых статьях, которые я читал, просто используйте first (), чтобы получить значение из базы данных, но при попытке я всегда получаю ошибку, подобную следующей: ErrorException Пытается получить свойство «id_belian» необъектного

кто-нибудь может мне помочь?

это мой код контроллера :

  /**
     * Update the specified resource in storage.
     *
     * @param  IlluminateHttpRequest  $request
     * @param  int  $id
     * @return IlluminateHttpResponse
     */
    public function update(Request $request, $id)
    {
        $isValid = $request->validate([
            'total_bayar' => 'required|integer'
        ]);


        // megambil total yang sudah di bayar
        $terbayar = Pembayaran::select('total_bayar')->where('id',$id)->first();

        // mengambil id pembelian dari tabel pembayaran
        $id_data_bayar = Pembayaran::select('id_pembelian')->where('id',$id)->first();

        // ambil data jumlah yang harus di bayar dari tabel pembelian
        $harga_bayar = Pembelian::select('total_harga')->where('id',$id_data_bayar->id_pembelian)->first();

        $total_akan_terbayar = $terbayar->total_bayar   $request->get('total_bayar');  

        if($isValid){
            if(($harga_bayar->total_harga != $terbayar->total_bayar) amp;amp; ($harga_bayar->total_harga > $total_akan_terbayar)){
                $data = [
                    'total_bayar'=> $request->get('total_bayar'),
                    'updated_at' => Carbon::now(),
                    'status' => 'cicil'
                ];
                $isSaved = Pembayaran::where('id',$id)->update($data);
                if($isSaved){
                    return Redirect::to('/pembayaran/'.$id.'/edit')->with('warning','Transaksi Anda Sebesar Rp.'.$total_akan_terbayar.' Berhasil dicatat');
                }else{
                    return Redirect::to('/pembayaran/'.$id.'/edit')->with('error','Transaksi Anda Gagal dicatat');
                }
            } elseif(($harga_bayar->total_harga != $terbayar->total_bayar) amp;amp; ($harga_bayar->total_harga == $total_akan_terbayar)) {
                $data = [
                    'total_bayar'=> $request->get('total_bayar'),
                    'updated_at' => Carbon::now(),
                    'status' => 'lunas'
                ];
                $isSaved = Pembayaran::where('id',$id)->update($data);
                if($isSaved){
                    return Redirect::to('/pembayaran/'.$id.'/edit')->with('warning','Transaksi Anda Sebesar Rp.'.$total_akan_terbayar.' Berhasil dicatat');
                }else{
                    return Redirect::to('/pembayaran/'.$id.'/edit')->with('error','Transaksi Anda Gagal dicatat');
                }
            } elseif(($harga_bayar->total_harga != $terbayar->total_bayar) amp;amp; ($harga_bayar->total_harga < $total_akan_terbayar)) {
                return Redirect::to('/pembayaran/'.$id.'/edit')->with('warning','Jumlah yang anda masukan berlebih Rp.'.($total_akan_terbayar-$harga_bayar->total_harga));
            } else {
                return Redirect::to('/pembayaran/'.$id.'/edit')->with('error','Transaksi Anda Gagal dicatat');
            }
        }else{
            return Redirect::to('/pembayaran/'.$id.'/edit')->with('error','Transaksi Anda Gagal dicatat');
        }
    }
 

Комментарии:

1. сначала проверьте $id_data_bayar , не является ли значение null здесь, прежде чем пытаться получить доступ к его свойству $harga_bayar = Pembelian::select('total_harga')->where('id',$id_data_bayar->id_pembelian)->first(); , если оно равно null, то вы пытаетесь получить доступ к свойству из значения null, которое не является объектом

Ответ №1:

Твоя проблема начинается отсюда . Вы пытаетесь получить доступ к свойству id_pembelian здесь $id_data_bayar->id_pembelian .Проблема в том, что $id_data_bayar оно в некотором смысле равно нулю. Таким образом, вы пытаетесь получить доступ к свойству из нулевого значения, которое не является объектом.Таким образом, ваша ошибка ясно выражает проблему.ЧТОБЫ предотвратить это, вы можете сделать что-то вроде приведенного ниже.

  // mengambil id pembelian dari tabel pembayaran
        $id_data_bayar = Pembayaran::select('id_pembelian')->where('id',$id)->first();

        // ambil data jumlah yang harus di bayar dari tabel pembelian
     if($id_data_bayar)   $harga_bayar = Pembelian::select('total_harga')->where('id',$id_data_bayar->id_pembelian)->first();
     else // Something else that you need to get from db goes here
 

Или я что-то подобное тоже могу применить. Я понятия не имею о ваших именах переменных. Таким образом, вы можете добавить что-то, что хотите, для обновленных кодов с моей стороны

 $harga_bayar = Pembelian::select('total_harga')->where('id',$id_data_bayar->id_pembelian ?? false)->first();