Mysql
 sql >> Base de données >  >> RDS >> Mysql

Plusieurs tables avec une relation un à plusieurs (Laravel)

Vous devriez utiliser polymorphic relations pour cela. Il permet à plusieurs modèles d'utiliser une seule table.

Consultez la documentation ici

Dans votre cas particulier, chacune de vos tables ferait référence à un noteable_id colonne et un noteable_type .

Le noteable_id contiendra l'identifiant du (A/B/C) modèle.

Le noteable_type contiendra le nom de chaîne du modèle (A/B/C) .

Le (A/B/C) les modèles recevront désormais un nouvel attribut :

/**
 * (A/B/C) Model(s)
 */
public function notes()
{
    return $this->morphMany('App\Notes', 'noteable');
}

Et la note le modèle initiera ses propriétés polymorphes par rapport au nom d'attribut utilisé pour identifier vos polymorphic ids and types :

/**
 * Note Model
 */
public function noteable()
{
    return $this->morphTo();
}

Maintenant, vous pouvez simplement appeler ->noteable sur le (A/B/C) modèles, et ils partagent tous 1 table sans avoir besoin d'un autre tableau croisé dynamique pour chaque table.