Laravel 5.0在刀片中循环关联项目

时间:2019-05-10 09:05:52

标签: php laravel laravel-blade

我有这样的一对多关系:

1个块有很多blockItems

我这样获取控制器中的allBlocks:

$allBlocks = Block::all();

我通过这样的关系访问我的blockItems: 关系设置正确,我可以在刀片中执行此操作:

@foreach($allBlocks as $block)
    @foreach($block->blockItems as $item)
        {{ $item->item_type }}
    @endforeach
@endforeach

现在我的刀片中有我所有的积木,我想遍历ID为2的积木的blockItems。我已经尝试过:

@foreach($allBlocks->where('id', 2)->blockItems as $item)
    {{ $item->item_type}}
@endforeach

不幸的是,它什么也没显示。

4 个答案:

答案 0 :(得分:2)

您要在集合上应用where子句。您需要对集合运行getfirst方法,以按照where子句从集合中获取项目。

first将仅获得一项,然后您可以访问blockItems关系。

@foreach($allBlocks->where('id', 2)->first()->blockItems as $item)
    {{ $item->item_type}}
@endforeach

答案 1 :(得分:1)

您必须更改

    xaxis: {
      mode: "categories",
      showTicks: false,
      gridLines: false,        
      panRange: [0,null],
      rotateTicks: 90
    },

allBlocks->where('id', 2)->blockItems as $item

您只是忘记执行查询并调用元素上的blockItems

如果您的查询仅返回1个结果(按ID选择所期望的结果),则可以使用allBlocks->where('id', 2)->get() as $item->blockItems ,这样就不必循环结果。

答案 2 :(得分:0)

all返回包含Blocks

的集合

我认为您不需要数据库中所有现有的块,但是假设您想要。

您需要过滤所需的Block及其每个项目。您可以采取几种方法来过滤集合(如果您要使用确切的数据就不需要了,查询比通常使用对象要快)。

$collection->firstWhere('id', '=', 2);

因此您的代码应类似于

@foreach($allBlocks->firstWhere('id', '=', 2)->blockItems as $item)
    {{ $item->item_type}}
@endforeach
  

https://laravel.com/api/5.8/Illuminate/Database/Eloquent/Model.html#method_all   https://laravel.com/docs/5.8/collections#method-first-where

编辑:由于它是Laravel 5.0,因此您需要应用where条件

  

https://laravel.com/api/5.0/Illuminate/Database/Eloquent/Collection.html#method_where

请注意,根据文档,它仍然为您提供了一个集合,但是假设您的ID是唯一的,则可以使用first()

$collection->where('id', '=', 2); // will result in a filtered collection, to which you can apply first()

答案 3 :(得分:0)

尝试

@foreach($allBlocks as $block)
    @if($block->id==2)
         @foreach($block->blockItems as $item)
               {{ $item->item_type }}
         @endforeach
    @endif
@endforeach