[英]More efficient way to write foreach loops in Laravel
目前,我的应用程序使用了相当多的foreach
循环来迭代通过数据库拉出的数组。
为了让用户访问页面,无论它们是否有0,1或100个结果,我都必须使用三个IF
语句来阻止foreach循环中断。 此检查仅适用于0和1结果,任何更大的工作都可以。
我想我会有几个页面来迭代某些数据库结果,并且肯定使用3个IF语句不是最有效的方法吗?
一个例子:
控制器:
public function getArchived()
{
$alert = Alert::with('location')->where('user_id', '=', Auth::user()->id)
->onlyTrashed()
->first();
$this->layout->content = View::make('agents.alert.archived',
array('alert' => $alert));
}
查看(缩短):
@if((count($alert) > 1)
@foreach($alert->alerts as $alert)
{{ $alert->id }}
@endforeach
@elseif ((count($alert) > 0)
{{ $alert->id }}
@else
<p>You have no results</p>
@endif
在将阵列发送到视图之前,是否可以在控制器上执行检查? 任何指导将不胜感激
目前您不需要进行这些检查。 您正在使用first()
来获取单个对象。
我想你想要做的是使用get()
代替获取存档警报的集合。
$alerts = Alert::with('location')->where('user_id', '=', Auth::user()->id)
->onlyTrashed()
->get();
$this->layout->content = View::make('agents.alert.archived',
array('alerts' => $alerts));
现在你知道你将收到一个可以迭代的Collection。
@foreach($alerts as $alert)
{{ $alert->id }}
@endforeach
@if($alerts->empty())
No Records
@endif
更新:
在Laravel 4.2中,Blade现在支持这种语法:
@forelse($whole as $piece)
{{ $piece->something }}
@empty
No Records
@endforelse
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.