私は過去2日間の問題で苦労してきました。私はLaravelを使い始めましたし、Eloquent-syntaxが本当に好きです! しかし、私は3つのモデルの間に正しい関係を得ようとしているときに問題があります。Laravel多対多3機種
私は、このセットアップを持っている:
番組表は
- 私は を持っている私のイベントモデルでは
をROLE_ID
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);
}
そして私が含まれている私の役割モデルで
public function programs(){
return $this->hasMany(Program::class);
}
を持っている私のユーザーモデルでは
次の結果を得る必要があります。
Events -> Users -> Role
私のコントローラでは、私は持っています $ events =イベント:: 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"
}
}
]
}
}
]
}
を私はモデルがお互いに関連して取得することはできません - それはそうです。私が望む好ましい結果は、すべてのイベントが多くのユーザーと結びついており、そのイベントのすべてのユーザーが1つの役割に結びついているということです。どうすればLaravelとEloquentでこれを達成できますか?
ありがとうございました!
EDIT: iは番組表の
$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