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我真的不知道,但实际上它可能根本不应该在那里。。。给定
折叠()
,即。