繁体   English   中英

在Laravel中编写foreach循环的更有效方法

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM