Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/267.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php Laravel多对多,有3个型号_Php_Laravel_Eloquent_Models - Fatal编程技术网

Php Laravel多对多,有3个型号

Php Laravel多对多,有3个型号,php,laravel,eloquent,models,Php,Laravel,Eloquent,Models,过去几天我一直在为一个问题而挣扎。我刚刚开始使用Laravel,并且非常喜欢这种雄辩的语法! 但是,当我试图得到三个模型之间的正确关系时,有一个问题 我有这样的设置: 程序表包含 事件id 用户id 角色id 在我的事件模型中,我有 public function programs(){ return $this->hasMany(Program::class); } public function programs(){ return $this->hasMa

过去几天我一直在为一个问题而挣扎。我刚刚开始使用Laravel,并且非常喜欢这种雄辩的语法! 但是,当我试图得到三个模型之间的正确关系时,有一个问题

我有这样的设置:

程序表包含

  • 事件id
  • 用户id
  • 角色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 programs(){
    return $this->hasMany(Program::class);
}
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 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": "dummy@example.com",
            "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": "dummy@example.com",
            "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": "dummy@example.com",
            "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": "dummy@example.com",
            "created_at": "2017-03-20 16:45:09",
            "updated_at": "2017-03-20 16:45:09"
          }
        }
      ]
    }
  }
]
}
我无法让模特们相互联系起来——似乎是这样。我想要的首选结果是,所有事件都与多个用户绑定,并且该事件的所有用户都与一个角色绑定。我怎样才能做到这一点与拉雷维尔和雄辩

感谢您的回复

编辑: 为了获取数据,我使用以下代码生成上述结果

$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。很抱歉解释得不好。

可能只是试着一次做一个,然后找出返回的内容

@Fredrik Angell Moe说:

通过使用以下工具使其工作正常:

$events=Event::with('programs.role')->with('programs.user')->get()

ID为2的用户仅与角色为1的事件3关联 事件2的角色为1。从结果中可以看出,两者 事件具有角色1和角色2

您正在使用两个值。一个是用户id,另一个是事件id

Laravel只能定义两个模型之间的关系。这意味着您在查询中使用的是程序id和事件id

但是用户id被忽略了。因此,它将只添加与模型相关的用户,而不是使用用户id进行过滤


解决此问题的最佳方法是,在需要获取两个以上模型之间的关系的原始查询中,不要使用关系go。

您的关系看起来很好。这可能只是你试图获取数据的方式不好。你能发布代码中不起作用的部分吗?抱歉@ettdro-应该在原始帖子中包含这一点。请看更新的问题。这不是你得到的吗??我不知道你到底想要什么?如果我们查看您的
$event
返回的内容,您有一个包含两个用户和一个与之关联的角色的事件。@ettdro我已经包含了programs表的内容-因此可能更清楚我想要的结果。可能只是尝试一次创建一个,然后找出返回的内容?您是否意识到您可以这样做:
$events=Event::with('programs.role','programs.user')->get()@Fredrik Angell Moe查看此代码以获得更清晰的代码!