我在最近几天一直在努力解决问题。我刚开始使用Laravel,并且越来越喜欢Eloquent语法! 但是当我试图获得三种模型之间的正确关系时存在一个问题。Laravel多对多3款
我有这种设置:
节目表中包含
- 事项标识
- user_id说明
- ROLE_ID
在我的事件模型我有
public function programs(){
return $this->hasMany(Program::class);
}
在我的用户模型我有
public function programs(){
return $this->hasMany(Program::class);
}
在我的榜样,我得到了
public function programs(){
return $this->hasMany(Program::class);
}
而我的计划模型包含
public function event(){
return $this->belongsTo(Event::class);
}
public function user(){
return $this->belongsTo(User::class);
}
public function role(){
return $this->belongsTo(Role::class);
}
我需要得到如下结果
Events -> Users -> Role
在我的控制器中,我有 $ events = Event :: with('programs.role.programs.user') - > get();
这是生产这样的:
{
"id": 2,
"name": "Concert: Freddy Kalas",
"description": "Freddy Kalas konsert",
"user_id": 2,
"time_from": "12.04.2017 22:00:00",
"time_to": "12.04.2017 23:00:00",
"created_at": "2017-03-20 18:28:44",
"updated_at": "2017-03-20 18:28:44",
"programs": [
{
"id": 2,
"event_id": 2,
"user_id": 2,
"role_id": 1,
"created_at": null,
"updated_at": null,
"role": {
"id": 1,
"name": "Camera operator",
"description": "Operates ordinary cameras or PTZ cameras",
"created_at": "2017-03-20 20:11:06",
"updated_at": "2017-03-20 20:11:06",
"programs": [
{
"id": 1,
"event_id": 3,
"user_id": 2,
"role_id": 1,
"created_at": null,
"updated_at": null,
"user": {
"id": 2,
"name": "Dummy Dum",
"email": "[email protected]",
"created_at": "2017-03-20 16:45:09",
"updated_at": "2017-03-20 16:45:09"
}
},
{
"id": 2,
"event_id": 2,
"user_id": 2,
"role_id": 1,
"created_at": null,
"updated_at": null,
"user": {
"id": 2,
"name": "Dummy Dum",
"email": "[email protected]",
"created_at": "2017-03-20 16:45:09",
"updated_at": "2017-03-20 16:45:09"
}
}
]
}
}
]
},
{
"id": 3,
"name": "Prøveproduksjon",
"description": "Prøveproduksjon med video og lyd",
"user_id": 1,
"time_from": "11.04.2017 13:00:00",
"time_to": "11.04.2017 17:00:00",
"created_at": "2017-04-03 17:12:37",
"updated_at": "2017-04-03 17:12:37",
"programs": [
{
"id": 1,
"event_id": 3,
"user_id": 2,
"role_id": 1,
"created_at": null,
"updated_at": null,
"role": {
"id": 1,
"name": "Camera operator",
"description": "Operates ordinary cameras or PTZ cameras",
"created_at": "2017-03-20 20:11:06",
"updated_at": "2017-03-20 20:11:06",
"programs": [
{
"id": 1,
"event_id": 3,
"user_id": 2,
"role_id": 1,
"created_at": null,
"updated_at": null,
"user": {
"id": 2,
"name": "Dummy Dum",
"email": "[email protected]",
"created_at": "2017-03-20 16:45:09",
"updated_at": "2017-03-20 16:45:09"
}
},
{
"id": 2,
"event_id": 2,
"user_id": 2,
"role_id": 1,
"created_at": null,
"updated_at": null,
"user": {
"id": 2,
"name": "Dummy Dum",
"email": "[email protected]",
"created_at": "2017-03-20 16:45:09",
"updated_at": "2017-03-20 16:45:09"
}
}
]
}
}
]
}
我不能涉及到海誓山盟的模型 - 它似乎。我希望的首选结果是所有事件都与许多用户绑定 - 并且该事件的所有用户都绑定到一个角色。我如何用Laravel和雄辩来完成这个任务?
感谢您的回复!
编辑: 要提取我使用下面的代码来生成上述
$events = Event::with('programs.role.programs.user')->get();
内容的程序表的结果中的数据
# id, event_id, user_id, role_id, created_at, updated_at
'1', '3', '2', '1', NULL, NULL
'2', '2', '2', '1', NULL, NULL
这将意味着与的ID的用户2仅与角色为1的事件3和角色为1的事件2相关联。从结果中可以看出,两个事件都具有角色1和2.对不起,对于不好的解释。
你的关系看起来不错。这可能就是你试图获取不好的数据的方式。你可以发布不适用于你的代码的部分吗? – ettdro
对不起@ettdro - 应该包括在原来的文章。请参阅最新的问题。 –
是不是你到那里?我不确定要真正理解你想要什么?如果我们看看'$ event'返回的是什么,那么你有一个包含2个用户的事件和一个与它们相关联的角色。 – ettdro