sql >> Databasteknik >  >> RDS >> Mysql

Laravel vältalig Relation mellan 3 bord

I ditt nuvarande schema kommer du inte att kunna tagga artistens roll på basis av album.
Eftersom det inte finns någon relation i dina tabeller för att definiera posten i artist_role tabellen är för ett specifikt album. Så vad jag skulle föreslå är att skapa en mellantabell som innehåller role_id ,artist_id och album_id .
Att använda den här mellantabellen med laravels manyToMany relation, kan du definiera metoderna i dina modeller och ange ett attribut som pivotattribut.

För t.ex. i Artistmodell :

public function Roles(){
    return $this->belongsToMany('App\Roles')->withPivot('album_id');
}

public function Albums(){
    return $this->belongsToMany('App\Albums')->withPivot('role_id');
}

Definiera liknande metoder för andra modeller också...

Uppdatering:

För att få Artist med sin roll i Album lägg till följande metod i Album modell:

public function Artists(){
    return $this->belongsToMany('App\Artist')->withPivot('role_id');
}

För roller lägg till följande metod:

public function Roles(){
    return $this->belongsToMany('App\Roles')->withPivot('artist_id');
}



  1. Datavisualisering med Apache Zeppelin – Handledning

  2. Snabbt enkelt sätt att migrera SQLite3 till MySQL?

  3. Mysql JDBC-drivrutin ClassNotFoundException

  4. Lägger till summa från 2 olika tabeller