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

时间:2018-02-07 11:52:36

标签: laravel many-to-many relationship

该平台具有多对多关系,其中表assigned_users包含分配给Users的所有CalendarEvents

enter image description here

我需要通过CalendarEvents获取已分配的用户作为对象,显示每个用户的信息。所以,我想通过User访问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次。将event_id更改为user_idid以及iduser_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,
                    ...
                },
                ...
            ]
        }
    ]
}

1 个答案:

答案 0 :(得分:2)

这不是hasManyThrough关系的情况。这里assigned_users是一个数据透视表,所以你只需要定义一个belongsToMany关系

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

要实现此目的,您可能需要将calendar_events表的主键更改为id(而不是event_id