Laravel从嵌套关系中提取数组
我只需要获取从以下查询返回的Laravel从嵌套关系中提取数组,laravel,Laravel,我只需要获取从以下查询返回的roomnumber数组: $roomnumbers = Room::with(['floorroomcount' => function($query){ $query->with('roomnumber')->get(); }])->where('roomtype_id', $roomtype_id)->get(); 尝试: 以下采摘正在返回floorroomcount $roomnu
roomnumber
数组:
$roomnumbers = Room::with(['floorroomcount' => function($query){
$query->with('roomnumber')->get();
}])->where('roomtype_id', $roomtype_id)->get();
尝试:
以下采摘正在返回floorroomcount
$roomnumbers->pluck('floorroomcount');
但是我需要roomnumber
array,我怎么才能得到呢?试试看
$roomnumbers = Room::with(['floorroomcount' => function($query){
$query->with('roomnumber')->get();
}])
->where('roomtype_id', $roomtype_id)
->get();
$records = $roomnumbers->map(function($element, $value){
return $element->map(function($e, $v){
return $e->roomnumber;
});
})->values()->all();
map()
是一种Laravel收集方法,因此您需要导入控制器顶部的收集外观,如:使用照明\支持\收集代码>这是可行的,但有许多循环和直接回音,如果有任何可以简化的地方,请告诉我:
$roomnumbers = Room::with(['floorroomcount.roomnumber'])->where('roomtype_id', $roomtype_id)->get();
$floorroomcounts = $roomnumbers->pluck('floorroomcount');
$records = $floorroomcounts->map(function($floorroomcount, $value){
return $floorroomcount->pluck('roomnumber')->flatten();
})->values()->all();
foreach($records as $record){
foreach($record as $row){
echo '<option value='.$row->id.'>'.$row->roomnumber.'</option>';
}
}
//return response()->json($roomnumbers);
$roomnumbers=Room::with(['floorroomcount.roomnumber'])->where('roomtype\u id',$roomtype\u id)->get();
$floorroomcounts=$RoomNumber->Pull('floorroomcount');
$records=$floorroomcounts->map(函数($floorroomcount,$value){
返回$floorroomcount->Pull('roomnumber')->Flatte();
})->值()->all();
foreach($记录为$记录){
foreach($记录为$行){
回显“.$row->roomnumber.”;
}
}
//return response()->json($roomnumbers);
这将在一个集合中提供所有roomnumber
结果:
$roomnumbers->pull('floorroomcount')->collapse()->pull('roomnumber')->collapse();
您可以将@Jonas Staudenmeir的答案缩短如下:
$roomnumbers->pluck('floorroomcount.*.roomnumber.*')->collapse();
pluck('*')
在这个特定上下文中与collapse()
基本相同。更改return$element->roomnumber
返回[null,null,null]
只是dd($element)
和dd($value)
在map()函数中,它不起作用,你得到了什么?dd($element)
在room
对象时给出。然后dd($value)
给出0
试试我更新的答案。您可能会得到房间编号的嵌套数组,您需要将其展平。请看您是否尝试了$roomnumbers->pull('floorroomcount.roomnumbers')代码>?是的,它给出[null,null,null]
但是如果你dd($roomnumbers)代码>,房间号数据确实存在?是的,它存在,房间号,里面有楼层计数
,里面有房间号
是的。它给出了roomnumber
arrayi很长时间以来一直在研究coimbine数组,而且collapse
做得很好肯定有一个更漂亮的解决方案,目前我有这样的代码:Group::with('service\u groups.services')->get()->each->service\u groups->each->services->pull('service\u groups')->collapse()->pull('services'))->collapse()->pull('name')代码>我知道这只是有点多,但它基本上是一种多对多的关系,所以你能做什么…更新:我找到了一个修复程序并将其作为答案发布:)collapse()
是答案,它救了我一辈子来处理嵌套关系。非常感谢。尾随的*
必要吗?@Jonas Staudenmeir我真的不知道,但实际上它可能根本不应该在那里。。。给定折叠()
,即。