graficajam
Relazioni polimorfiche in Laravel

Relazioni polimorfiche in Laravel

Giamp26/03/2024

Le relazioni polimorfiche sono uno speciale tipo di relazione che permette di associare modelli di diverse classi.

morphMany

Prendiamo, ad esempio tre modelli: Post, Video e Commenti.

Entrambi i modelli Post e Video possono avere dei commenti associati.
A differenza di hasMany, grazie al "polimorfismo" possiamo utilizzare un solo modello Commenti che può essere relazionato sia ai modelli Post sia ai modelli Video.

morphMany: la struttura

Seguendo l'esempio, questa potrebbe essere la struttura nel nostro database.

# tab posts
id
content

# tab videos
id
video_url

# tab comments
id
content
commentable_id
commentable_type

Soffermiamoci nella tabella comments.
Le colonne commentable_id e commentable_type permettono di creare un'astrazione per identificare oggetti da commentare.

  • commentable_id conterrà l'id del Post o del Video da commentare
  • commentable_type conterrà un riferimento, sotto forma di stringa, della classe alla quale l'id fa riferimento
id   content   commentable_id   commentable_type
1    ...       1                App/Models/Post
2    ...       1                App/Models/Video

Settare la relazione

Ecco come settare la relazione nei modelli:

// model Post
public function comments() {
    return $this->morphMany(Comment::class, 'commentable');
}

// model Video
public function comments() {
    return $this->morphMany(Comment::class, 'commentable');
}

// model Comment
public function commentable() {
    return $this->morphTo();
}

Hai qualcosa da dire?

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *

leggi anche...