You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Laravel如何基于user_id对eventQuestionUsers关联集合进行分组

实现方案

首先先修正你原有代码的小问题:你查询单个事件时用了get()方法,返回的是模型集合而非单个Event实例,会导致后续权限判断、关联预加载逻辑异常,需要改为firstOrFail()。

Laravel 集合已经内置了groupBy()方法,完全可以满足你的分组需求,不需要自定义遍历方法。你对集合不可变的顾虑是多余的:集合的不可变指的是调用操作方法时不会修改原集合,而是返回新的集合实例,直接将返回的分组后集合赋值给关联属性即可。

修改后的控制器代码如下:

public function show($event_id)
{
    $user = Auth::user();
    // 查单个事件用firstOrFail,匹配不到时自动抛出404异常
    $event = Event::where('id', $event_id)->firstOrFail();

    if ($user->can('manage', $event)) {
        // 预加载关联后调用groupBy按user_id分组,直接赋值回关联属性
        $event->load('eventQuestionUsers');
        $event->eventQuestionUsers = $event->eventQuestionUsers->groupBy('user_id');
        // 如果你需要纯数组结构而非集合,可改为:
        // $event->eventQuestionUsers = $event->eventQuestionUsers->groupBy('user_id')->toArray();
    }

    return view('single_event', [
        'event' => $event
    ]);
}

上述代码输出的eventQuestionUsers结构和你预期的完全一致,符合Laravel的编码规范。

内容的提问来源于stack exchange,提问作者Zeth

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.04 05:27:04