Ankündigung

Einklappen
Keine Ankündigung bisher.

belongsToMany

Einklappen
X
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • belongsToMany

    Hallo,

    ich habe folgende Tabellen:

    Code:
    User
    -------------------------------
    id
    name
    ...
    
    Customer
    -------------------------------
    id
    name
    ...
    
    Role
    -------------------------------
    id
    name
    ...
    
    RoleAssignments
    -------------------------------
    id
    UserId
    CustomerId
    RoleId
    Ich versuche eine Abfrage zu machen:
    Gib mir zu einem Benutzer alle Kunden mit der entsprechenden Rolle.

    In meinem User-Model habe ich folgende Funktionen hinterlegt:
    PHP-Code:
        public function customers() {
            return 
    $this->belongsToMany(Customer::class, 'RoleAssignments''UserId''CustomerId')->withPivot('RoleId');        
        }

        public function 
    roles() {
            return 
    $this->belongsToMany(Role::class, 'RoleAssignments''UserId''RoleId');
        } 
    und über folgende Abfrage erhalte ich alle Kunden geordnet nach dem Kundennamen, die diesem Benutzer zugeteilt sind:
    PHP-Code:
    $userCustomers $user->customers()->orderBy('name')->get(); 
    Ich brauche aber zusätzlich zu jedem Kunden die entsprechende Rolle. Wie mache ich das?

    Beste Grüße,
    Patrick


  • #2
    Mit einem join. Siehe auch http://www.sql-join.com/sql-join-types/

    Kommentar


    • #3
      Das ist mir klar, aber ich will ja nicht händisch eine Query zusammenbauen, sondern Eloquent von Laravel dafür nutzen.

      Kommentar


      • #4
        Entweder du kannst dein Modell so abstrahieren, dass der Customer ein User sein kann oder du nutzt die Polymorphic Relationships von Laravel, wobei erstere Lösung zu empfehlen ist.
        "Software is like Sex, it's best if it's free." - Linus Torvalds

        Kommentar


        • #5
          Guten Morgen,

          ich muss mit einer bestehenden MSSQL-Datenbank arbeiten. Ich kann keine Änderungen an der bestehenden Datenbank vornehmen. Das Einzige was ich machen könnte, wäre Helper-Tables hinzuzufügen.
          Ist es korrekt, dass ich für "Many To Many Polymorphic Relations" bzw. auch für die einfachen "Polymorphic Relations" in meiner Tabelle "RoleAssignments" (siehe Initial-Beitrag) zwei zstl. Spalten bräuchte (z.B. role_assignment_id und role_assignment_type)?
          Dann würde das für mich nicht funktionieren, weil es mir nicht möglich sein wird die Tabelle um diese zwei Spalten zu ergänzen. Außerdem würde ich doch auf diese Weise auch wieder nur bspw. die Kunden oder die Rollen zu einem Benutzer abfragen können und nicht "der User hat folgende Kunden mit jeweils folgender Rolle".
          Ich sehe das leider nicht als meine Lösung, es sei denn ich habe die Polymorphic Relations nicht richtig verstanden. Ich meine eine Zwischentabelle mit drei Foreign Keys ist jetzt nichts dermaßen ungewöhnliches, dafür muss es doch auch mit Laravel eine Lösung geben?

          Kommentar


          • #6
            In so einem Fall würde ich nicht mit belongsToMany arbeiten, sondern RoleAssignment als eigenständiges Model sehen und dementsprechend dran arbeiten und die Relationships bauen

            Dann hättest du z.B. $user->assignments[0]->role und $user->assignments[0]->customer die du entsprechend verwenden kannst.

            Kommentar


            • #7
              Falls dein problem noch nicht gelöst ist nutze doch with von eloquent ?
              User::with(['customers', 'roles'])->all();

              Kommentar

              Lädt...
              X