我有这样的一对多关系:
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
不幸的是,它什么也没显示。
答案 0 :(得分:2)
您要在集合上应用where子句。您需要对集合运行get
或first
方法,以按照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