Laravel中如何从多维Eloquent集合获取指定字段值填充日历
错误原因
- Laravel 的
Illuminate\Database\Eloquent\Collection类中,$items是*受保护(protected)*属性,禁止外部直接通过->items访问,这是你报错的核心原因。 - 你拿到的
$events本身已经是集合实例,无需再用collect()重复转换。
正确获取字段方法
你当前的集合是按日期字符串为键的二维结构,每个键对应的值是 DaysEvent 模型的集合,可根据需求选择以下实现:
1. 展开所有事件,提取目标字段(适合直接给日历组件传值)
直接用集合的 flatten() 方法拍平嵌套结构,再遍历提取所需字段即可。Eloquent 模型支持直接通过属性名读取 #attributes 内的字段值,无需手动操作 attributes 数组:
$calendarItems = $events->flatten()->map(function ($event) { return [ 'title' => $event->title, 'location' => $event->location, 'event_start' => $event->event_start, 'event_end' => $event->event_end, // 其他需要的字段按需补充 ]; }); // 如需转为数组直接调用 toArray() $calendarItemsArr = $calendarItems->toArray();
2. 保留原日期分组结构提取字段
如果需要保留日期和对应事件的关联关系,直接遍历外层集合即可:
$dateGroupedItems = $events->map(function ($eventGroup, $date) { return [ 'date' => $date, 'event_list' => $eventGroup->map(function ($event) { return [ 'title' => $event->title, 'location' => $event->location, 'event_start' => $event->event_start, 'event_end' => $event->event_end, ]; }) ]; });
内容的提问来源于stack exchange,提问作者romidoco
相关产品推荐
相关产品推荐

