Eloquent ORM: Třída modelu

Model v tomto případě představuje vrstvu aplikace která komunikuje s databází za účelem získávání a ukládání data.

Knihovna Eloquent ORM je k dispozici jako součást velmi oblíbeného PHP frameworku Laravel. Lze ji také použít i samostatně, případně v rámci frameworku vlastního.

Eloquent ORM používá implementaci Active Record. Jedná se o způsob přístupu k datům v databázi způsobem, kdy každá třída modelu představuje jednu tabulku v databázi a každá instance této třídy představuje jeden záznam (řádek) z tabulky v databázi.

Active Record umožňuje pracovat s daty v tabulkách stejně jako s objekty tříd.

Díky tomu Eloquent ORM umožňuje vývojářům soustředit se při vývoji na „business“ logiku aplikace a nerozptylovat se psaním opakujících se SQL dotazů.

Práce s modelem v rámci knihovny Eloquent ORM je opravdu snadná a intuitivní.

Konvence pro pojmenování

  • název třídy: Article
    • jednotné číslo
    • Camel case
    • třída dědí třídu Illuminate\Database\Eloquent\Model
  • název tabulky v databázi: articles
    • množné číslo
    • malá písmena
  • název sloupce s primárním klíčem: id
    • lze změnit pomocí vlastnosti třídy: protected $primaryKey
  • název sloupce s cizím klíčem: article_id

Hromadné přiřazení dat

/**
 * The attributes that are mass assignable.
 *
 * @var array
 */
 protected $fillable = ['title', 'description'];

Ochrana atributů

/**
 * The attributes that aren't mass assignable.
 *
 * @var array
 */
 protected $guarded = ['price'];

Případně

/**
 * The attributes that aren't mass assignable.
 *
 * @var array
 */
protected $guarded = [];

Rozsahy dotazů

//@todo https://laravel.com/docs/master/eloquent#query-scopes

Události

Eloquent model během svého životního cyklu vyhazuje následující události, které lze zachytávat a reagovat na ně.

  • retrieved
    • při získání existujícího modelu z databáze
  • creating
    • při uložení nového modelu do databáze
  • created
    • po uložení nového modelu do databáze
  • updating
    • při uložení existujícího modelu do databáze
  • updated
    • po uložení existujícího modelu do databáze
  • saving
    • při uložení nového nebo existujícího modelu do databáze
  • saved
    • po uložení nového nebo existujícího modelu do databáze
  • deleting
    • při smazání modelu z databáze
  • deleted
    • po smazání modelu z databáze
  • restoring
    • při obnovení modelu do databáze
  • restored
    • po obnovení modelu do databáze

Je třeba vytvořit vlastnost $dispatchesEvents, která mapuje části životního cyklu modelu Eloquentu

/**
 * The event map for the model.
 *
 * @var array
 */
 protected $dispatchesEvents = [
  'saved' => App\Events\UserSaved::class,
  'deleted' => App\Events\UserDeleted::class,
 ];

Observers

Pokud nasloucháme mnoha událostem konkrétního modelu, můžeme je všechny seskupit do jedné třídy.

//@todo https://laravel.com/docs/master/eloquent#events

Accessors

(z anglického slova access – přístup)

Accessory, podobně jako mutátory (mutators), umožňují formátovat hodnoty atributů instancí modelů Eloquentu.

/**
 * Get the user's first name.
 *
 * @param string $value
 * @return string
 */
public function getFirstNameAttribute($value)
{
  return ucfirst($value);
}
  • vytvoříme funkci get<NázevAtributu>Attribute()
    • název metody: FirstName pro atribut first_name

Funkce Accessoru je automaticky volána při přístupu k danému atributu třídy. Hodnota atributu tak může být před jeho vrácením změněna.

Mutators

Mutátor je metoda třídy modelu, která je automaticky volána před nastavením hodnoty atributu.

metoda set<název_atributu>Attribute()

Mutátory dat

Eloquent automaticky převádí hodnoty sloupců created_at a updated_at, případně deleted_at (které představují datum vytvoření, datum poslední úpravy a případně datum smazání záznamu v databázi) na instance třídy Carbon.

Carbon je knihovna v PHP, která tvoří nástavbu pro třídu DateTime – a rozšiřuje a usnadňuje práci s daty v PHP.

Pomocí atributu $dates můžeme určit, které atributy se mají takto automaticky převádět:

/**
 * The attributes that should be mutated to dates.
 *
 * @var array
 */
 protected $dates = [
  'created_at',
  'updated_at',
  'deleted_at'
 ];

Určení typů atributů

Každý atribut lze převést na požadovaný datový typ.
Dostupné datové typy jsou:

  • integer, real, float, double,
  • string,
  • boolean,
  • object,
  • array,
  • collection,
  • date, datetime, a timestamp

Příklad

Například atribut is_admin, jehož hodnotu ukládáme v databázi v podobě čísla typu integer (0 nebo 1) lze při získání z třídy modelu automaticky převést na datový typ boolean (true nebo false):

/**
 * The attributes that should be cast to native types.
 *
 * @var array
 */
 protected $casts = [
  'is_admin' => 'boolean',
 ];

Změna výchozího nastavení

Změna názvu sloupce představující primární klíč:

protected $primaryKey = 'article_id';

Změna názvu sloupce pro uložení data vytvoření a aktualizace řádku v databázi.

const CREATED_AT = 'creation_date';
const UPDATED_AT = 'last_update';

Zdroje:

Napsat komentář

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