Eloquent ORM: Relace: Polymorfní relace

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

Napsat komentář

Vaše e-mailová adresa nebude zveřejněna. Vyžadované informace jsou označeny *