sql >> Databáze >  >> RDS >> Mysql

Laravel Výmluvný vztah mezi 3 tabulkami

Ve vašem aktuálním schématu nebudete moci označit roli umělce na základě alba.
Ve vašich tabulkách neexistuje žádný vztah, který by definoval, že položka v artist_role tabulka je pro konkrétní album. Navrhoval bych tedy vytvořit přechodnou tabulku obsahující role_id ,artist_id a album_id .
Chcete-li použít tuto přechodnou tabulku s laravelovým manyToMany vztahu, můžete ve svých modelech definovat metody specifikující jeden atribut jako atribut pivot.

Pro např. v Model umělce :

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

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

Definujte podobné metody také pro ostatní modely..

Aktualizace:

Za získání Artist s jeho rolí v albu přidejte následující metodu do Album model:

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

Pro role přidejte následující metodu:

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



  1. Aktuální stav správy zálohování Open Source pro PostgreSQL

  2. Unicode literály MySQL

  3. Dotaz na konkrétní sloupec JSON (postgres) pomocí sqlalchemy

  4. Vrácení výsledků dotazu na základě dnešního data v SQL (MySQL) část 2