尝试在视图 blade 中获取 属性 'id' 的 non-object

Trying to get property 'id' of non-object in view blade

这是我的代码我该怎么办?在我的项目中没有读取这段代码有什么问题?我写这段代码错了吗? 尝试获取 属性 'id' of non-object (View: C:\xampp\htdocs\rezkastore\resources\views\pages\daftar_supplier.blade.php)

@foreach($daftar_supplier as $daftar_supplier)
    <div class="modal fade" id="editModal-{{ $daftar_supplier->id }}" tabindex="-1" role="dialog" aria-labelledby="addModalLabel" aria-hidden="true">
       <div class="modal-dialog modal-dialog-centered" role="document">
          <div class="modal-content">
                <div class="modal-header">
                  <h5 class="modal-title mb-0" id="addModalLabel">Tambah Data Pelanggan</h5>
                </div>
              <div class="modal-body">
                 <!-- Card body -->
                <form role="form" action="{{ route('daftar_supplier.update', $daftar_supplier->id) }}" method="POST">
                  @csrf
                  @method('POST')
                    <!-- Input groups with icon -->
                  <div class="form-group row">
                      <label for="addNamaSupplier" class="col-md-2 col-form-label form-control-label">Nama</label>
                      <div class="col-md-10">
                        <input class="form-control" type="nama" value="{{ $daftar_supplier->nama_supplier }}" id="updateNamaSupplier" name="updateNamaSupplier" required>
                      </div>
                    </div>
                    <div class="form-group row">
                      <label for="updateAlamat" class="col-md-2 col-form-label form-control-label">Alamat</label>
                      <div class="col-md-10">
                        <input class="form-control" type="alamat" value="{{ $daftar_supplier->alamat }}" id="updateAlamat" name="updateAlamat" required>
                      </div>
                    </div>
                    <div class="form-group row">
                      <label for="updateNoTelp" class="col-md-2 col-form-label form-control-label">No.Telp</label>
                      <div class="col-md-10">
                        <input class="form-control" type="notelp" value="{{ $daftar_supplier->no_telp }}" id="updateNoTelp" name="updateNoTelp" required>
                      </div>
                    </div> 
                    <div class="form-group row">
                      <label for="updateEmail" class="col-md-2 col-form-label form-control-label">Email</label>
                      <div class="col-md-10">
                        <input class="form-control" type="email" value="{{ $daftar_supplier->email }}" id="updateEmail" name="updateEmail" required>
                      </div>
                    </div> 
            </div>
            <div class="modal-footer">
              <button type="button" class="btn btn-secondary" data-dismiss="modal">Close</button>
              <button type="submit" class="btn btn-primary">Tambah Data</button>
            </div>
            </form>
         </div>
       </div>
    </div>
    @endforeach

这是视图的控制器

public function update(Request $request, $id)
    {
            $update_supplier = DaftarSupplier::findOrFail($id);
            $update_supplier->nama_supplier = $request->updateNamaSupplier;
            $update_supplier->alamat = $request->updateAlamat;
            $update_supplier->no_telp = $request->updateNoTelp;
            $update_supplier->email = $request->updateEmail;
            $update_supplier->save();

            if($update_supplier){
                Alert::success(' Berhasil Update Data ', ' Silahkan dicek kembali');
            }elseif(!$update_supplier){
                Alert::error('data gagal disimpan ', ' Silahkan coba lagi');
            }
            return redirect()->back();
    }

这是路线

//Daftar Supplier
     Route::get('daftar_supplier','\App\Http\Controllers\DaftarSupplierController@index')->name('daftar_supplier');
     Route::post('daftar_supplier/create','\App\Http\Controllers\DaftarSupplierController@create')->name('daftar_supplier.create');
     Route::delete('daftar_supplier/delete/{id}','\App\Http\Controllers\DaftarSupplierController@delete')->name('daftar_supplier.delete');
     Route::put('daftar_supplier/update/{id}', '\App\Http\Controllers\DaftarSupplierController@update')->name('daftar_supplier.update');

请帮忙

您可能没有将 $daftar_supplier 传递给控制器​​中的视图。它应该在您尚未共享的 DaftarSupplierController@index 的末尾。一般来说,你应该根据 https://laravel.com/docs/8.x/views#passing-data-to-views

将数据数组传递给视图

此外,最好在 @foreach 循环中为数组和值使用不同的变量名称,例如:

@foreach($daftar_suppliers as $daftar_supplier)

请注意遵循简单的变量命名约定。

单数 Object 或记录 - $daftar_supplier 单数 record/object

复数 collection 条记录 - collection 条 daftar_supplier 条 daftar_supplier 记录

这不仅使代码易于阅读和理解 - 它还避免了运行时的歧义。

在问题 blade 视图的片段中,@foreach($daftar_supplier as $daftar_supplier) 使用完全相同的变量名称 collection 以及循环遍历 collection 时的单个记录。

这样的命名约定不仅使代码难以阅读和理解,还会在运行时产生歧义。

因此 id="editModal-{{ $daftar_supplier->id }}" 可以在运行时进行评估,就像您尝试访问 collection 而不是单个 object 上的 id 属性 一样。

当然 id 是 collection 中的单个记录 属性,而 collection 本身没有 id 属性 所以在运行时可能会抛出错误。