Mam trzy modele, które muszą być powiązane w tabeli przestawnej: użytkownik, uczeń, plan. Tak więc każdy użytkownik może zapisać ucznia do planu.Trójstronna relacja wiele-wiele w Laravel
Co znalazłem tak daleko jest stworzenie pivot dla dwóch modeli, powiedzmy Użytkownika oraz plan i przymocować student_id jako dodatkowe pola:
$user->plans()->attach([1 => ['student_id' => $student_id]);
Jednym z problemów jest to, że jeśli staram się odzyskać plany dla konkretnego użytkownika, nie pojawia się model studencki, tylko identyfikator, więc:
return $this->BelongsToMany('App\Plan', 'plans_students_users', 'user_id', 'plan_id')
->withPivot('student_id');
więc musiałbym zrobić drugą kwerendę, aby uzyskać model studencki.
Czy jest jakiś inny sposób się do tego zabrać, zważywszy, że będę chciał dokonać kwerendy we wszystkich kierunkach, np:
$user->plans() (attaching the students)
$student->plans() (attaching the user)
$plan->users() (attaching the students)
$plan->students() (attaching the users)
Świetna odpowiedź Carlos. –
Nie można używać metod attach() i detach() w ten sposób. – Mesuti
W modelu relacji, dlaczego jest toToMany? czy nie powinno to należeć? W ten sposób każda relacja ma JEDNEGO studenta, JEDNEGO użytkownika i JEDEN plan, prawda? – Adocad