Ich habe in den letzten Tagen mit einem Problem gekämpft. Ich habe gerade begonnen, Laravel zu benutzen und werde die Eloquent-Syntax wirklich gern hören! Aber es gibt ein Problem, wenn ich versuche, die richtige Beziehung zwischen drei Modellen zu bekommen.Laravel viele zu viele mit 3 Modellen
Ich habe dieses Setup bekam:
Programme Tabelle enthält
- event_id
- ROLE_ID user_id
In meinem Ereignis-Modell, das ich
habenpublic function programs(){
return $this->hasMany(Program::class);
}
In meinem Benutzer Modell habe ich
bekampublic function programs(){
return $this->hasMany(Program::class);
}
In meinem Rollenmodell muss ich
public function programs(){
return $this->hasMany(Program::class);
}
Und mein Programm-Modell enthält
public function event(){
return $this->belongsTo(Event::class);
}
public function user(){
return $this->belongsTo(User::class);
}
public function role(){
return $this->belongsTo(Role::class);
}
Und ich müssen das folgende Ergebnis erhalten
Events -> Users -> Role
In meinem Controller habe ich $ events = Event :: mit ('programme.role.programs.user') -> get();
Welche dies produziert:
{
"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"
}
}
]
}
}
]
}
Ich kann nicht die Modelle zu einander in Beziehung bekommen - es scheint. Das bevorzugte Ergebnis, das ich möchte, ist, dass alle Ereignisse mit vielen Benutzern verbunden sind - und alle Benutzer für dieses Ereignis an eine Rolle gebunden sind. Wie kann ich das mit Laravel und Eloquent erreichen?
Vielen Dank für Ihre Antworten!
EDIT: die Daten holen i den folgenden Code verwenden, um die Ergebnisse über
$events = Event::with('programs.role.programs.user')->get();
Inhalt der Programme Tabelle
# id, event_id, user_id, role_id, created_at, updated_at
'1', '3', '2', '1', NULL, NULL
'2', '2', '2', '1', NULL, NULL
Dies würde bedeuten, zu erzeugen, dass der Benutzer mit der ID 2 ist nur Ereignis 3 mit einer Rolle von 1 und Ereignis 2 mit einer Rolle von 1 zugeordnet. Wie Sie aus den Ergebnissen sehen können, hat beide Ereignisse Rolle 1 und 2. Sorry für schlechte Erklärung ..
Ihre Beziehungen sieht gut aus. Es ist wahrscheinlich nur die Art, wie du versuchst, die Daten zu bekommen, die nicht gut sind. Können Sie den Teil posten, der in Ihrem Code nicht funktioniert? – ettdro
Sorry @ettdro - sollte das im ursprünglichen Beitrag enthalten haben. Bitte sehen Sie sich die aktualisierte Frage an. –
Ist das nicht, was du da hast? Ich bin mir nicht sicher, wirklich zu verstehen, was Sie wollen? Wenn wir sehen, was Ihr $ Event zurückgibt, haben Sie ein Event mit 2 Benutzern und einer Rolle, die ihnen zugeordnet ist. – ettdro