我有一个模型events
,我存储有关事件的信息。每个事件都属于一个group
。事件组的users
能够回复他们是否参加该事件。此信息保存在单独的表event_replies
中。
现在,通过一个简单的关系,我可以得到事件的所有回复:
public function replies()
{
return $this->hasMany('App\Models\EventReply','event_id','id');
}
或者我可以让所有的用户
public function users()
{
return $this->hasMany('App\Models\User','group_id','group_id');
}
但是加载回复并不会加载所有没有回复的用户。
我想要的是:该关系应返回组的所有用户。如果他们回答,则返回值,如果没有:该值应为空。
是否可以将用户关系与企业关系合并/Map?
编辑
下面是一个JSON结果应该是什么样子的示例:
[
{
"id":1,
"group":1,
"name":"Event 1",
"replies":[
{
"name":"user 1",
"reply":1 // replied
},
{
"name":"user 2",
"reply":0 // replied
},
{
"name":"user 3",
"reply":null // NO reply in event_replies
},
{
"name":"user 4",
"reply":1 // replied
}
]
}
]
编辑2
Events
-表:
id: int
name: String
group_id: int
Users
-表:
id: int
name: String
group_id: int
event_replies
-表:
event_id: int
user_id: int
就像我之前说的:我的目标是获得一个包含所有属于组--〉user.group_id = event.group_id
的用户的事件。如果他们回复了,Reply应该在user对象中。如果不是-用户对象中的Reply对象应该为null。
对于普通的SQL查询,我会加入所有用户,并留下加入回复。
2条答案
按热度按时间osh3o9ms1#
在EventReply模型中获取用户回复并定义用户关系
EventReply.php
nnvyjq4y2#
如果我理解正确的话,您希望“急切地加载”您的
Event
模型,其中嵌套了users
及其各自的replies
。获取单个事件:
获取所有事件:
以下是Laravel关于eager loading的文档: