【问题标题】:Property [id] does not exist on this collection instance in laravel 5.5在 laravel 5.5 中,此集合实例上不存在属性 [id]
【发布时间】:2017-12-05 07:03:05
【问题描述】:

我正在处理purchaseOrderpurchaseOrderDetails 数据库表。

我正在将数据从一个表单保存到两个表中。这是purchaseOrderrDetails 项目的附加行表。插入数据工作正常。

但是,现在我需要同时更新表 purchaseOrderpurchaseOrderDetails

我正在尝试将所有purchaseOrderDetails 数据添加到我使用附加行系统的表单中。而且,我收到了这个错误:

此集合实例上不存在属性 [id]

什么应该是正确的代码,请有人帮助我?下面是我的控制器方法和编辑视图-

Purchase_OrderController.php

   //purchase order update form
public function update($id){
    $suppliers   = Supplier::all();
    $categories = Category::all();

   $purchaseorder_id = $id;
   $purchaseorder= Purchase_Order::where('id', '=', $purchaseorder_id)->get();

   $purchaseorder_details_id = Purchase_Order_Details::pluck('purchase_order_id');
   $purchaseorder_details = Purchase_Order_Details::where('purchase_order_id', '=', $id)->get();
   //$purchaseorder_details = Purchase_Order_Details::with('purchaseorder')->get();


  //dd($purchaseorder_details);

    return view('user/purchaseorder.edit')->with(['purchaseorder' => $purchaseorder, 'purchaseorder_details' => $purchaseorder_details, 'suppliers' => $suppliers, 'categories' => $categories]);
}

edit.blade.php

<tbody>
      <?php $item_row = 0; ?>
      @foreach($purchaseorder_details as $pur_detail)
       <tr id="item-row-{{ $item_row }}">
        <td class="text-center" style="vertical-align: middle;">
        <button type="button" onclick="$(\'#item-row-' + item_row + '\').remove();" title="Delete" class="btn btn-xs btn-danger"><i class="fa fa-trash"></i></button>
        </td>
        <td>
        <input value="{{ $pur_detail->code }}" class="form-control typeahead" required="required" placeholder="Item Code" name="item[{{ $item_row }}][code]" type="text" id="item-name-{{ $item_row }}">
        </td>
        <td>
        <input value="{{ $pur_detail->item_name }}" class="form-control" required="required" name="item[{{ $item_row }}][item_name]" type="text" id="item-name-{{ $item_row }}">
        </td>
        <td>
        <select class="form-control" required="required" name="item[{{ $item_row }}][category]" id="item-category-{{ $item_row }}">
       <option selected="selected" value="">Select Category</option>
         @foreach($categories as $category)
          <option value="{{ $category->id }}">{{ $category->name }}</option>
         @endforeach
        </select>
        </td>
        <td>
        <input value="{{ $pur_detail->quantity }}" class="form-control text-right" required="required" name="item[{{ $item_row }}][quantity]" type="text" id="item-quantity-{{ $item_row }}">
        </td>
        <td>
        <input value="{{ $pur_detail->uom }}" class="form-control text-right" required="required" name="item[{{ $item_row }}][uom]" type="text" id="item-uom-{{ $item_row }}">
        </td>
       </tr>
      @endforeach
       <?php $item_row++; ?>
       <tr id="addItem">
         <td class="text-center"><button type="button" onclick="addItem();" title="Add" class="btn btn-xs btn-primary" data-original-title="Add"><i class="fa fa-plus"></i></button></td>
         <td class="text-right" colspan="5"></td>
        </tr>
       </tbody>

第一个是 - purchaseOrder,第二个是 purchaseOrderDetails

【问题讨论】:

  • 旁注,我们在foreach 循环中有一个$loop var,无需自己计算
  • 能否请您添加实际错误
  • ErrorException (E_ERROR) 此集合实例上不存在属性 [id]。 (查看:E:\xampp\htdocs\printingpress\resources\views\user\purchaseorder\edit.blade.php)
  • 在 collection.php - public function __get($key) { if (!in_array($key, static::$proxies)) { throw new Exception("Property [{$key}]此集合实例上不存在。"); } 返回新的 HigherOrderCollectionProxy($this, $key); }
  • 错误的行号或错误上方粘贴中的哪一行会有帮助,你不觉得吗?

标签: php mysql laravel laravel-5


【解决方案1】:

集合是一个围绕数组的精美对象包装器,仅此而已。集合不是它包含的东西,这是你犯的错误。

$array = [
    ['id' => 1, 'name' => 'bob'],
    ['id' => 2, 'name' => 'tom'],
    ...
];

您不会这样做,因为您知道您想要的索引不在数组上,而是在其中的数组上:

$array['id'];
// but you would do this:
$array[0]['id'];

但是对于一个只是围绕数组的对象的 Collection,你正在做的正是这样的事情:

$collection->id;

Collections 包含项目,您需要这些项目之一的“id”而不是 Collection 本身,因为 Collection 没有名为“id”的属性。

$collection->first()->id;   // id from the first object

foreach ($collection as $item) {
    $item->id;
}

etc ...

【讨论】:

  • 如果你只想访问第一个对象键,那么你可以像下面那样做 $product = Product::create($wc_product); $product->all(); // 如果只想访问 id 然后使用 ->first(); $产品['id']; laravel.com/docs/master/collections#method-keys
猜你喜欢
  • 2023-03-12
  • 2018-04-12
  • 1970-01-01
  • 1970-01-01
  • 2021-11-14
  • 2020-07-11
  • 2019-07-10
  • 2018-07-09
相关资源
最近更新 更多