Laravel 5.1 不能在集合上使用 @foreach
Posted
技术标签:
【中文标题】Laravel 5.1 不能在集合上使用 @foreach【英文标题】:Laravel 5.1 cant use @foreach on collection 【发布时间】:2018-05-27 19:04:10 【问题描述】:这是我拥有的数据:
但使用此刀片模板代码:
<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>
我收到了这个错误:
fbe60fc17d23b35313269a941fc4d6f0 第 51 行中的 ErrorException:尝试 获取非对象的属性(查看: /home/dgadmin/public_html/test/resources/views/admin/expired.blade.php)
这里有什么问题?为什么我不能使用@foreach 循环?
【问题讨论】:
你在使用 php7 吗? 你应该可以。第51行是foreach循环,还是$order->order
不存在?
51 行是 <?php dd($order); ?>
或 <?php Log::info($order); ?>
看看它包含什么
打开收藏中的#attributes
并发布到这里
【参考方案1】:
首先,进入您的 /storage/framework/views 文件夹并查看第 51 行中名为 fbe60fc17d23b35313269a941fc4d6f0 的文件。我看到你说它是 $order->id,但我不确定你是否检查了实际提供的编译视图或 admin/expired.blade.php。编译视图是引发错误的视图,因此行号将与编译视图相对应,而不是您正在制作的刀片。当您查看这条线时,您会看到缺少的内容。抛出此错误是因为您试图访问模型上的空值。如果您想走惰性路线,请将循环更改为:
<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>
这将按预期打印循环,将任何缺失值(如触发此错误的值)更改为空白字符串。
【讨论】:
我可以改变创建收藏的方式吗? 现在我用 $orders = Auth::user()->bitems()->where('type','v')->where('validity', 'latest()->get();但是如何创建集合以在我的路上使用它? 集合很好,我不相信有办法修改集合来避免此错误,这只是模型中缺少属性并且您尝试检索时调用的错误它。将来避免这种情况的一种方法是为您的模型设置默认值或确保需要放入的数据存在。 IE:Laravel 的表单验证。以上是关于Laravel 5.1 不能在集合上使用 @foreach的主要内容,如果未能解决你的问题,请参考以下文章
Laravel 5.1 中 for 循环中的 PHP Carbon 日期
尝试在laravel 5.1 mac上安装php phantom js时,Composer安装错误