显示来自Laravel雄辩的已过滤供应商的采购订单清单

时间:2020-03-12 04:30:41

标签: laravel eloquent

我正在尝试在表格中显示供应商列表及其购买订单。

供应商模型

public function vendorPo()
{
    return $this->hasMany('App\PurchasedOrder', 'vendor_id','vendor_id');
}

供应商控制器

public function vendor()
{
    $vendorPo = Vendor::with('vendorPo')
        ->get()
        ->keyBy('id')
        ->groupBy('vendor_name');

    $purchaseOrders = PurchasedOrder::all()->where('publish','=','1');

    return view('backend.purchase-order.vendor', compact('purchaseOrders'))
            ->with('vendorPo', $vendorPo);
}

获取我的索引

@foreach ($vendorPo as $vendor => $vendor_list)
    <tr>
        <th colspan="7"
            style="background-color: #F7F7F7"> {{ $vendor }}: ({{ $vendor_list->count() }} vendors)
        </th>
    </tr>
        @foreach ($vendor_list as $key => $vendorPoList)
        <tr>
            <td>
                {{ $vendorPoList->vendorPo->po_id}}
            </td>
        </tr>
        @endforeach
@endforeach

如果我这样做

...
@foreach ($vendor_list as $key => $vendorPoList)
     <tr>
        <td>
            {{ $vendorPoList}}
        </td>
     </tr>
@endforeach
...

结果是这个 enter image description here

如果我

...
<td>
     {{ $vendorPoList->vendorPO->po_id}}}
</td>
...

结果是错误

Facade\Ignition\Exceptions\ViewException
Property [po_id] does not exist on this collection instance. (View: 

请帮助我。谢谢!

1 个答案:

答案 0 :(得分:0)

您会遇到此问题,因为您的vendorPO关系是HasMany关系。如果从这种关系中拉回记录,则结果始终是一个数组(即使只有一条记录),也总是由Eloquent转换为Collection

因此,$vendorPoList->vendorPO是一个集合,并且在名为po_id的集合上没有变量。

根据数据模型,您应该重新访问该关系,或者在@foreach上进行$vendorPoList->vendorPO

相关问题