Laravel 4 - 使用BLADE按部分显示集合的优雅方式

时间:2014-11-03 10:05:27

标签: laravel collections blade

我有这个简单的任务: 显示几个中国朝代的统治者,但在我的VIEW文件的几个不同的地方。

在我的控制器中,我创建了变量

$dynasties = Dynasty::get()

在我的 Dynasty 模型中,我宣布与标尺模型的关系名为 rulerName

现在在我的视图中,每个王朝都有一个简短的介绍然后我这样做:

标尺:

@if($now_rulers_of_this_dynasty = 1) 
@endif  // dynasty id written as number; hack: this way the variable is not printed

@foreach($dynasty->rulerName as $dynasty_ruler)

     @if($dynasty_ruler->dynasty_id == $now_rulers_of_this_dynasty )
        {{$dynasty_ruler->name}}
     @endif
@endforeach

我的问题: 在L4的BLADE中有没有优雅的方法呢? 我如何只打印一个集合的一部分?

上面的代码完成了这项工作,但我希望找到一种更优雅的方法来实现相同的结果。

编辑:这就是我所拥有的:大约40个朝代和古代国家,以及c。 300个统治者,每个王朝有几个。 我的目标:我想从数据库中获取所有标尺到一个变量(集合),并将它们列在我的视图文件中。但不是所有人都同时出现。我想要它们在很多地方--Dynaxty X的统治者,然后是王朝Y--由另一个foreach循环打印。

1 个答案:

答案 0 :(得分:1)

我在这里假设一些事情,因为你还没有和我们分享你的模特...... 首先,您的关系可能应该被称为rulers而不是rulerName。我将在后面的示例代码中使用rulers

此外,我并不完全确定我理解你的问题,因为这对我来说似乎很容易,所以如果我错了就纠正我。无论如何,我会这样做:

@foreach($dynasties as $dynasty)
    <p>{{ $dynasty->intro }}</p>
    <ul>
    @foreach($dynasty->rulers as $ruler)
        <li>{{ $ruler->name }}</li>
    @endforeach
    </ul>
@endforeach