Laravel 5.1 无法在 collection 上使用 @foreach

Laravel 5.1 cant use @foreach on collection

这是我的数据:

但使用此 blade 模板代码:

<tbody>
    @foreach ($orders as $order)
        <tr>
            <td>{{$order->id}}</td> //51 line
            <td>{{$order->order->b_first_name}} {{$order->order->b_last_name}}</td>
            <td>{{$order->order->r_first_name}} {{$order->order->r_last_name}}</td>
            <td>£{{$order->total}}</td>

            <td>{{$order->validity->diffForHumans()}}</td>


        </tr>
        @endforeach
            </tbody>

我遇到了这个错误:

ErrorException in fbe60fc17d23b35313269a941fc4d6f0 line 51: Trying to get property of non-object (View: /home/dgadmin/public_html/test/resources/views/admin/expired.blade.php)

这里有什么问题?为什么我不能使用@foreach 循环?

首先,进入您的 /storage/framework/views 文件夹并查看第 51 行中名为 fbe60fc17d23b35313269a941fc4d6f0 的文件。我看到你说是$order->id,但我不确定你检查的是实际服务的编译视图还是admin/expired.blade.php。编译视图是抛出错误的视图,因此行号将与编译视图相对应,而不是您正在制作的 blade 。当您查看此行时,您会发现缺少的内容。抛出此错误是因为您正试图访问模型上的空值。如果您想走懒惰的路线,请将循环更改为:

<tbody>
@foreach ($orders as $order)
    <tr>
        <td>{{isset($order->id)? $order->id: ''}}</td> //51 line
        <td>{{isset($order->order->b_first_name)? $order->order->b_first_name : '' }} {{isset($order->order->b_last_name)? $order->order->b_last_name : ''}}</td>
        <td>{{isset($order->order->r_first_name)? $order->order->r_first_name : ''}} {{isset($order->order->r_last_name)? $order->order->r_last_name : ''}}</td>
        <td>£{{isset($order->total)?$order->total : ''}}</td>

        <td>{{$order->validity->diffForHumans()}}</td>


    </tr>
    @endforeach
        </tbody>

这将按预期打印循环,将任何缺失值(如触发此错误的值)更改为空字符串。