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
)。非常感谢,阿夫扎尔。很乐意帮忙!干杯