目前,我的应用程序使用了很多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
在将数组发送到视图之前,是否可以在控制器上执行检查?任何指导将不胜感激
答案 0 :(得分:2)
目前您不需要进行这些检查。您正在使用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