Umožňují jednomu modelu patřit více než jednomu jinému modelu v rámci jedné asociace.
Příklad
Např. pokud uživatelé mohou psát komentáře jak ke článkům tak k videím.
Užitím polymorfních relací stačí jedna tabulka ve které uložíme všechny komentáře.
- sloupec commentable_id obsahuje id článku nebo videa
- sloupec commentable_type obsahuje název třídy daného modelu
Struktura modelu
namespace App; use Illuminate\Database\Eloquent\Model; class Comment extends Model { /** * Get all of the owning commentable models. */ public function commentable() { return $this->morphTo(); } }
namespace App; use Illuminate\Database\Eloquent\Model; class Post extends Model { /** * Get all of the post's comments. */ public function comments() { return $this->morphMany('App\Comment', 'commentable'); } }
namespace App; use Illuminate\Database\Eloquent\Model; class Video extends Model { /** * Get all of the video's comments. */ public function comments() { return $this->morphMany('App\Comment', 'commentable'); } }
Polymorfní relace Many To Many
Modely Post a Video mohou sdílet polymorfní relaci k modelu Tag.
Umožňuje mít jeden seznam tagů, který používají články (posts) i videa (videos).