Ukládání
Fajn, máme definovanou entitu, máme její instanci, ta je naplněná daty a teď je čas ji uložit. Řekněme si rovnou, že v praxi na tom nic složitého není a dělá se to takto:
$article = new Content_Article();
if( $article->catchAddForm() ) {
$article->save();
//... ... ...
}
Prosté volání metody save(), které je součástí třídy Jet\DataModel od které všechny entity dědí.
V praxi to tedy není žádná raketová věda. Ale pojďme si trochu rozebrat jak to funguje a jaké to má aspekty.
V první řadě nezapomeňte na události - to se může při ukládání často hodit a voláním metody save voláte i vaše případné metody co zařídí to co nezařídilo ukládání samotné (například nějaké operace se soubory). Entita by ideálně měla být vytvořena tak, aby z jejího vnějšku stačilo volání metody save() a nic víc - o veškerou logiku se má postarat vnitřně, aby byl dodržen princip zapouzdření.
A připomeňme si také ID kontrolery. Při jejich správném použití se o generování a zejména ani předávání ID hlavní entity subentitám nemusíte starat. ID kontrolery ve spolupráci se systémem vnitřních relací se o to postarají za vás. To je rutinní otravná práce - tedy právě taková, o kterou se má platforma postarat sama a to také udělá. Tedy tím jak předáte vygenerované autoincrement id další subentitám tvořícím třeba zboží ve vašem e-shopu se nestarejte.
Také je dobré mít na paměti, že celý proces ukládání je SQL transakce (pokud to backend umí - většinou ale ano), do které je zahrnuto ukládání všech případných subenetit. K nastartování transakce dochází automaticky, k ukončení také a k tzv. rollback při případném selhání rovněž.
Zapomněl jsem na něco? Ano. Na to, že metoda save() sama určí, zda se jedná o ukládání nového záznamu, či úpravu záznamu stávajícího. K tomu jsou v rámci třídy Jet\DataModel příslušné metody.