Laravel hasManyThrough只返回一个结果,而不是全部结果

Laravel hasManyThrough只返回一个结果,而不是全部结果,laravel,many-to-many,relationship,Laravel,Many To Many,Relationship,平台具有多对多关系,其中表assigned\u users包含分配给CalendarEvents的所有用户 我需要通过CalendarEvents获取分配的用户作为对象,显示每个用户的信息。因此,我想通过AssignedUsers访问用户,因为我想获取与该事件相关的所有用户 public function assignedUsers() { return $this->hasManyThrough(Users::class, AssignedUsers::class, 'user

平台具有多对多关系,其中表
assigned\u users
包含分配给
CalendarEvents
的所有
用户

我需要通过
CalendarEvents
获取分配的用户作为对象,显示每个用户的信息。因此,我想通过
AssignedUsers
访问
用户
,因为我想获取与该事件相关的所有用户

public function assignedUsers()
{
    return $this->hasManyThrough(Users::class, AssignedUsers::class, 'user_id', 'id');
}
它可以工作,但只显示表中的第一个用户。我想把它们全部展示出来。目前有3个

"assigned_users": [
    { id: 1, ... }
]
如果我这样做:

public function assignedUsers()
{
    return $this->belongsToMany(Users::class, "assigned_users", "event_id", "event_id");
}
它将获取3个结果,但所有信息都来自同一用户。它将重复同一用户3次。将
事件id
更改为
用户id
id
,以及
id
用户id
将产生相同的结果

"assigned_users": [
    { id: 1, ... },
    { id: 1, ... },
    { id: 1, ... },
    ...
]
我试图实现的是以下结果:

{
    "status": "200",
    "success": true,
    "data": [
        {
            "event_id": 1,
            "event_key": "EB1M7OGJRPW0",
            "calendar_id": 4,
            "start_at": "2018-01-01 00:00:00",
            "end_at": "2018-01-31 00:00:00",
            "location": "123 Lorem, Ipsum",
            "event_name": "Event #1",
            "description": "Lorem ipsum dolor sit amet",
            "added_at": "2018-02-07 09:07:31",
            "created_by": {
                "id": 4,
                "name": "Foo Bar",
                "email": "foobar92@gmail.com",
                "first_name": "Foo",
                "last_name": "Bar",
                "status": "active",
                "is_activated": 0,
                "created_at": "2018-02-07 09:06:49",
                "updated_at": "2018-02-07 09:06:49"
            },
            "assigned_users": [
                {
                    "id": 1,
                    ...
                },
                {
                    "id": 2,
                    ...
                },
                {
                    "id": 3,
                    ...
                },
                ...
            ]
        }
    ]
}

hasManyThrough的关系并非如此。这里分配的用户是一个数据透视表,所以您只需要定义一个归属关系

public function assignedUsers()
{
    return $this->belongsToMany(Users::class, 'assigned_users', 'event_id', 'user_id');
}

要使其工作,您可能必须将calendar\u events表的主键更改为
id
(而不是
event\u id

。非常感谢,阿夫扎尔。很乐意帮忙!干杯