试图获取非对象的属性“id_pembelian”

Posted

技术标签:

【中文标题】试图获取非对象的属性“id_pembelian”【英文标题】:Trying to get property 'id_pembelian' of non-object 【发布时间】:2021-10-23 12:18:14 【问题描述】:

我想在不使用 foreach 的情况下从数据库中检索数据,在我阅读的一些文章中,我只使用 first() 从数据库中获取值,但是当我尝试时,我总是收到如下错误: 错误异常 试图获取非对象的属性“id_belian”

谁能帮帮我?

这是我的控制器代码:

 /**
     * Update the specified resource in storage.
     *
     * @param  \Illuminate\Http\Request  $request
     * @param  int  $id
     * @return \Illuminate\Http\Response
     */
    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) && ($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) && ($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) && ($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');
        
    

【问题讨论】:

在尝试访问其属性$harga_bayar = Pembelian::select('total_harga')-&gt;where('id',$id_data_bayar-&gt;id_pembelian)-&gt;first();之前,首先检查$id_data_bayar在此处是否为空,如果它为空,那么您正在尝试从不是对象的空值访问属性跨度> 【参考方案1】:

你的问题从这里开始。您尝试访问id_pembelian here$id_data_bayar-&gt;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();

【讨论】:

以上是关于试图获取非对象的属性“id_pembelian”的主要内容,如果未能解决你的问题,请参考以下文章

Blade - 试图获取非对象的属性

试图获取非对象的属性

laravel 试图获取非对象的属性

试图获取非对象的属性“主机名”

试图获取非对象的属性 [laravel 5.2]

试图获取非对象的属性