【问题标题】:Trying to get property 'id' of non-object in view blade试图在视图刀片中获取非对象的属性“id”
【发布时间】:2020-12-06 10:56:07
【问题描述】:

这是我的代码,我该怎么办?未在我的项目中读取此代码有什么问题?我写这段代码错了吗? 试图获取非对象的属性“id”(查看: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');

请帮忙

【问题讨论】:

  • foreach 循环中添加 dd($pelanggan) 以查看里面有什么
  • 进入控制器或视图刀片?怎么写?
  • foreach循环之后只需输入此代码{{ dd($pelanggan) }}
  • 从刀片视图的第一行中非常明显的一个问题是@foreach($daftar_supplier as $daftar_supplier) 请注意区分集合的变量名称和单个记录的名称。 @foreach($daftar_suppliers as $daftar_supplier) 听起来很合乎逻辑,也让人觉得我们正在迭代 daftar_suppliers 的集合
  • id="editModal-{{ $daftar_supplier-&gt;id }}" 可能会引发错误,因为这也可能意味着您正在尝试访问集合而不是对象的 id 属性。换成@foreach($daftar_suppliers as $daftar_supplier)再检查一下错误是否依旧

标签: php laravel controller sql-update sql-insert


【解决方案1】:

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

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

@foreach($daftar_suppliers as $daftar_supplier)

【讨论】:

    【解决方案2】:

    请务必遵循简单的变量命名约定。

    单个对象或记录的单数 - 单个记录/对象的 $daftar_supplier

    用于收集记录的复数 - $daftar_suppliers 用于收集 daftar_supplier 记录

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

    在问题 @foreach($daftar_supplier as $daftar_supplier) 的刀片视图的 sn-p 中,在循环集合时使用完全相同的变量名称进行集合以及单个记录。

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

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

    当然id 是集合中单个记录的属性,而集合本身没有id 属性,因此可能会在运行时引发错误。

    【讨论】:

    • 感谢您的解释和知识
    猜你喜欢
    • 2020-06-04
    • 1970-01-01
    • 1970-01-01
    • 2019-12-26
    • 2019-04-30
    • 1970-01-01
    • 1970-01-01
    • 2021-05-26
    • 2019-03-10
    相关资源
    最近更新 更多