Eloquent ORM: Relace: Has Many Through

Has Many Through

Poskytuje pohodlnou zkratku pro přístup ke vzdáleným relacím pomocí prostřední vazby.

Příklad

Model Country může mít mnoho modelů Post prostřednictvím modelu User:

Pomocí relace hasManyThrough lze jednoduše získat všechny příspěvky (tabulka posts) pro danou zemi (tabulka countries), přestože tabulka posts neobsahuje přímou vazbu na tabulku countries.

$country->posts

Struktura modelu

namespace App;

use Illuminate\Database\Eloquent\Model;

class Country extends Model
{

  /**
   * Get all of the posts for the country.
   */
  public function posts()
  {
    return $this->hasManyThrough('App\Post', 'App\User');
  }

}

Jako první parametr metody hasManyThrough uvádíme model ke kterému chceme získat přístup, jako druhý parametr uvádíme model prostředníka.

Zdroje

Eloquent ORM: Relace 1:1 (one-to-one)

Základní vztah kdy jeden prvek z první skupiny je spojen s jedním jediným prvkem z druhé skupiny.

Např. jeden člověk má (has one) jedno rodné číslo. A jedno rodné číslo patří (belongs to) jednomu člověku.

Vztahy typu 1:1 obecně nemusíme, ale podle potřeby můžeme rozdělovat do více tabulek (entit).

Pokračování textu Eloquent ORM: Relace 1:1 (one-to-one)

Návrhové vzory: Messenger (přepravka)

  • počet atributů = počet přenášených hodnot
  • instance třídy jsou tzv. immutable objects
  • atributy třídy jsou veřejné konstanty
    • lze k nim (z důvodu efektivity) přistupovat přímo
    • nelze je dále měnit
  • lze definovat přístupové metody (gettery), příp. další užitečné metody
  • atributy třídy jsou nastaveny v konstruktoru, dále je nelze měnit (bezpečné předání dat)

Pokračování textu Návrhové vzory: Messenger (přepravka)

Návrhové vzory: Jednoduchá (statická) tovární metoda

Jedná se o jednodušší verzi návrhového vzoru (obecná) tovární metoda.

Použijeme, pokud potřebujeme funkčnost, kterou není schopen dodat konstruktor.
Pokud potřebujeme získat odkaz na objekt, ale z různých důvodů nechceme či nemůžeme použít konstruktor.

Pokračování textu Návrhové vzory: Jednoduchá (statická) tovární metoda

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