该平台具有多对多关系,其中表assigned_users
包含分配给Users
的所有CalendarEvents
。
我需要通过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_id
和id
以及id
和user_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,
...
},
...
]
}
]
}
答案 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
)