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).

Zdroje