Databázová vrstva pro Nette: dibi, Doctrine, NotORM?
- David Grudl
- Nette Core | 8212
Vždy jsem považoval za výhodu Nette, že není pevně svázáno se žádnou databázovou vrstvou. Historie v tomto dala za pravdu, třeba tím, že jiné frameworky, dříve s DB svázané, přicházejí s novými verzemi chlubícími se, že už svázané nejsou. Také jsem nikdy nechtěl (byť nesvázaně) implementovat ActiveRecord, protože jsem ho považoval za nesmysl vhodný leda tak k vytvoření blogu za 15 min a pobláznění davů, což opět vývoj onde potvrzuje.
(tohle nepíšu, abych dělal ramena, ale jako úvod do současné situace)
Ačkoliv je spousta plánů, co se dá na Nette vylepšovat, čistě z praktického pohledu zjišťuji, že nejvíc času a úsilí nechávají programátoři na straně modelu. Jinými slovy, když se v Nette vyřeší nějaké zásadní body, ušetří to programátorům 5–10 % námahy, ale model je stojí 80 %, takže vylepšování Nette má v důsledku spíš kosmetický efekt. Bohužel nežijeme ve světě, kde by si programátor vybíral z desítek výborných databázových vrstev, takže zaměřit se na model bude mít pro něj největší přínos.
Podpora modelu
(pro jistotu: model !== databázová tabulka, stejně jako prezentační vrstva !== html)
Podpora modelu se dá rozdělit do tří částí:
- podpora na straně presenteru/šablony: snad nikoho nepřekvapí že šablona může sama požádat model o data, která vykreslí. Chybí ale obecný mechanismus, jak může vytvořit odkaz, který data modifikuje, nebo nalinkovaný způsob, jak se vůbec k modelu připojit.
- podpora na straně modelu: sandbox by měl naznačit způsob inicializace modelu a framework dodat nástroje pro validaci dat. Co je ale nejpodstatnější, tak dodat vrstvu pro práci s databází.
- podpora na straně nástrojů: a tím je výchozí administrace (nemyslím generátor administrací, ale univerzální a modifikovatelná administrace)
Mít v Nette vrstvu pro práci s databází, není to popření prvního odstavce? Rozhodně ne, nejde mi o svázání, ale o dodání výchozího řešení. Jak jsem psal, v případě databázových vrstev není moc z čeho vybírat a pomalu každý programátor stojí před otázkou: „co použít“ a já mu chci dát odpověď, současně s možností s mou odpovědí nesouhlasit.
Kterou vrstvu použít?
Máme tu nejstarší dibi, staré a nativní PDO, nové NotORM a staronové Doctrine (a pak samozřejmě stovky dalších projektů, ale s toutu čtveřicí si vystačíme). Volbu knihovny bych podřídil jediné otázce: co tvůrci webových aplikací od databáze očekávají?
- potřebují vypisovat její surový obsah a to v nejrůznějších formách, dost často specifikovaných až v šabloně (řazení, stránkování, filtrování); přičemž řádově méně potřebují vypisovat data nějakým způsobem přechroustaná přes další vrstvy byznys logiky, byť i tohle je občas třeba.
- používají triviální insert/update/delete
- nepotřebují měnit podobu databází, krom zjišťování metainformací o tabulkách pro automatické administrace nebo deployment
- v určitých případech se hodí automatické persistování objektů do databáze
- v případě Nette se předpokládá, že to bude fungovat intuitivně, zatraceně dobře a výkonně ;-)
Po úvahách mi vyplynulo, že nejvhodnějším adeptem je něco, co je z 85 % NotORM, 10 % dibi a z 5 % Doctrine 2. A tohle bych strašně rád viděl jako nativní součást Nette :-)
NotORM je skutečně geniální dílko Jakuba Vrány. Mimochodem jde o první produkt implementující plánované předbíhání budoucnosti a řešící MVC paradox mnohem lépe, než DibiDataSource. Přičemž nakopírování NotORM do distribučního balíku mi nevyhovuje, rád bych jej více přizpůsobil ekosystému Nette, odmagičtil, začlenil do něj některé funkce z dibi a vytvořil standardní administraci. Myslím, že by to mohl být skutečně úžasný výchozí nástroj, který plně vyhoví drtivé většině potřeb.
p.s. vývoj této knihovny bude probíhat tak, jak je u Nette dobrým zvykem: přepíšu pro něj všechny své projekty, takže výsledek nebude akademická šaškárna, ale ryze praktický výborně použitelný produkt
- Tharos
- Člen | 1030
Takže dneska jdu slavit a hezky až do rána :). Konečně z frameworku zmizí něco, co osobně považuji za jednu z jeho největších slabin: nenabízí žádné řešení ani „best practices“, jak řešit model. Myslím, že tohle je opravdu skvělý krok. Jen tak dál!
Edit: Abych se ale vyjádřil k věci, můj (bezvýznamný) názor je asi hodně podobný jako Tvůj. Experimentoval jsem v jednom projektu s NotORM a pracovalo se mi s ním vcelku dobře (i když výhrady jsem měl a v dalším projektu jej zase nepoužil). Takže za sebe mohu říct, že kdyby podobné rozhraní mělo nativně dibi a bylo by to celé do Nette nějak hezky integrovatelné, asi bych už dále nehledal.
Editoval Tharos (8. 12. 2010 17:14)
- Radek Hulán
- Člen | 7
Na NotORM jsem koukal. Jakub se tam snaží trošku o obstrakci funkcí, v nichž se databázové engine odlišují (třeba LIMIT / OFFSET), ale není to dotaženo (něco málo dělá pro Oracle).
Druhým kritickým bodem je práce s datumem a časem, to má také každá DB jinak, takže pokud má mít layer smysl, chtělo by takové funkce doplnit.
Třetím bodem je „lastInsertId“ při INSERTu – v některých DB není klasický autoincrement a dělá se to jinak, třeba přes sekvence.
Čtvrtým bodem je ukládání velkého textu – CLOB, XML a další. Opět, v některých DB to není možné nacpat do běžného SQL dotazu.
Pátým bodem je fulltext. V každé DB se hledá jinak.
To není míněno jako kritika, jen pokud má mít layer smysl oproti přímému použití PDO, pak by aspoň těchto pár věcí navíc měl (IMHO) přinášet. Pokud by byl zájem, pro Oracle a SQL Server rád logiku doplním.
Editoval Radek Hulán (8. 12. 2010 17:44)
- Jod
- Člen | 701
++1 notorm, použil som ho v pár projektoch, aj väčších ako firemný systém a som s ním spokojný. Zase viem, že u nás v práci by sme s ním nevyžili, kedže sem tam treba spraviť väčšiu query, kde to chce maximálne dibi. Svojou jednoduchosťou sa k nette výborne hodí. Doctrine by som nechal ZF :)
- Teyras
- Člen | 81
Osobně bych v Nette pro přístup k datům rád viděl nějaký obecný objekt na způsob DataSource a konkrétní řešení práce s databází ve stylu dibi… NotORM jsem ještě moc zblízka nezkoumal, takže nemůžu soudit. Doctrine se mi k Nette prostě nehodí, i když to je možná jen tím, že mi nevoní samo o sobě :) Hlavně ale moc nesouhlasím se zbytečným začleňováním cizích projektů, i když ta volba by tu zůstat měla…
Editoval Teyras (8. 12. 2010 19:02)
- Filip Procházka
- Moderator | 4668
Prý tu chybí zastánci Doctrine, tak jsem tady :) Ale teď vážně, …
výchozí model je pěkná myšlenka
nikdy jsem se nějak nesžil s potřebou rozhodovat o řazení dat
v templatě
just an idea:
nette/sandbox
nette/sandbox-dibi
nette/sandbox-doctrine2
nette/sandbox-notorm
Editoval HosipLan (8. 12. 2010 20:31)
- Lopo
- Člen | 277
mno neviem … ja osobne som vacmene odporca akehokolvek ORM/NotORM (tj ineho nez priameho zapisu SQL) a stale pouzivam len dibi (bez fluentov) do ktoreho som si dorobil
vychadzam z niekolkorocnych skusenosti – bud som robil tak male veci ze ich tlacenie cez nejaku abstrakciu nemalo zmysel a bol to kanon na vrabce, alebo som robil tak velke a zlozite veci ze jednoducho sa to nedalo pouzit a musel som si SQL dotazy pisat priamo sam (prilis velke a zlozite, alebo hodne parametrizovane)
alebo ako aj teraz – v nasom intranete sa pristupuje k 2 uplne rozdielnym DB (MySQL, Ingres) pricom do buducna je realna moznost ze pribudne este MSSql
Ak ale zostane moznost aj nadalej pouzit samotne dibi aby sa dali pisat priamo SQL dotazy, tak nemam vyhrady proti doplneniu dalsej moznosti v podobe hibridu NotORM/dibi a asi ho budem aj pouzivat v pripade projektov ktore maju pouzitu len jednu DB a jej velkost/zlozitost bude tomu rozhraniu zodpovedat
- Filip Procházka
- Moderator | 4668
Můžeš mít přece více instancí NotORM, tak jako máš více spojení v dibi, stejně neuděláš přenášení dat na úrovni SQL mezi dvěma spojeními, stejně budeš mít 2 připojení, NotORM je jenom rychlejší způsob jak data získat.
Co se týče komplexity, u jednoduchých věcí „kde byla abstrakce přítěží“ bych se naopak NotORM vůbec nebál, nesleduju jak dobře je na tom s opačným směrem (zápis), ale určitě je to použitelné při skombinování s dibi.
Což je další věc co jsem chtěl navrhnout. Udělat z NotORM šikovnější DataSource, napadlo mě to v souvislosti s tím co napsal David, takže ho to určitě napadlo už taky… Zkrátka začlenit NotORM do dibi, vedle nativních SQL, fluent a datasource.
Zpátky ke komplexitě… Co se týče velice, velice složitých věcí, je to jenom otázka návrhu, nemyslím si, že dobře navržená struktura entit ti bude ztěžovat získávání složitých struktur z databáze. Naopak.
Navíc (ono to sice platí i u čistého SQL, ale o to tady ještě víc) cokoliv napíšeš, nemusíš psát znovu, čím víc abstraktnější nástroj použiješ, tím míň pak budeš muset udělat úprav, když kód budeš chtít použít jinde.
Malý dodatek nakonec… Stejně přirozeným vývojem k abstrakci všichni dojdeme, já jsem došel už myslím docela daleko, když jsem se pustil do Doctrine. Jediné co vám všem v tom brání, jsou vlastní předsudky a nechuť zkoušet nové věci, protože stačí vyzkoušet něco nového a názor změníte, to jestli se se přikloníte k NotORM, nějakému ActiveRecord, nebo kanónu Doctrine2 je zase něco jiného.
- Lopo
- Člen | 277
- viac instancii – nemam prakticke skusenosti so ziadnym ORM takze ak je taka moznost potom v poho
- pri jednoduchych veciach mi pride zbytocne aby sa dotaz nejako dynamicky skladal alebo co … napisem ho priamo a mam pokoj
- zlozite veci – ak mi 1 report robi niekolko 10-tok dotazov nad 10-kami tabuliek ktore maju 100-tisice az miliony zaznamov tak pochybujem ze nejaky automat mi tie dotazy posklada lepsie nez ako som ich ja poskladal
- abstrakcia je dobra vec … ale osobne mam rad plnu kontrolu nad tym co do DB ide
dalsia vec ohladom komplexnosti – v niektorych reportoch som nuteny fungovat pomocou alter-ovania tabuliek na zaklade aktualnych hodnot vypoctu, tj napr pridavam stlpce z nejakeho predtym ziskaneho zoznamu a pod. co tiez nie je prave asi zrovna trivialne pouzivanie DB
- Filip Procházka
- Moderator | 4668
asi trošku utíkáme od tématu takže pro zájemce, pokračování tady: http://nezmar.jabbim.cz/…0/12/09.html#… ;-)
- Šaman
- Člen | 2658
Tak to je balada. Souhlasím stoprocentně s Davidem že na modelu aplikace stojí a že současné Nette v tomto směru sice k ničemu nenutí, ale také nic nenabízí.
Myslím, že použitelný nástroj pro začátečníky by se určitě hodil. Guru, evangelíci, masteři a podobná individua si samozřejmě mohou používat co chtějí ale oni už vědí proč. Lamky jsou rády za předžvejkané řešení pro které jsou psané i tutoriály a best practise.
- vrana
- Člen | 131
Radek Hulán napsal(a):
To není míněno jako kritika, jen pokud má mít layer smysl oproti přímému použití PDO, pak by aspoň těchto pár věcí navíc měl (IMHO) přinášet. Pokud by byl zájem, pro Oracle a SQL Server rád logiku doplním.
Díky za nabídku, pomoc u těchto databázových systémů určitě ocením. NotORM nicméně chápu jako skládač dotazů, takže třeba podporou různých syntaxí fulltextu si nejsem jist. Do ostatních věcí se můžeš pustit ve forku na GitHubu.
- Rampa
- Člen | 65
No to mě hrábne… Nějaký čas se mořím s vlastní implementací a
když to skoro je (rozuměj „před refactorem“), tak si tu přečtu, že to
bude součástí FW :)
Moje řešení je postaveno jako ORM nadstavba nad dibi ala Doctrine2.
Takže si definuju entity přes anotace, nastavuji typ dat, jointy, subkolekce
(objednávka->položky) atd. No a pak už se jen vytvoří Entity Manager a
instancujou entity.
Dále mám navázane komponenty, kterým se předá Entita(kolekce) a vytvoří
se control s tabulkou, včetně paginatoru a sub tabulky(tady vývoj
zamrznul – potřebuju dynamické snippety :( ) nebo formulář s validací
dat (bráno z definice entity). Data čtu až když jsou opravdu potřeba a ne
při vytvoření entity, zabraňuje to vytváření duplicitních entit,
optimalizace zápisu do db…
… Kdyby to někoho zajímalo, mohu se podělit.
- grey
- Člen | 94
Rampa wrote:
No to mě hrábne… Nějaký čas se mořím s vlastní implementací a když to skoro je (rozuměj „před refactorem“), tak si tu přečtu, že to bude součástí FW :)
Moje řešení je postaveno jako ORM nadstavba nad dibi ala Doctrine2.
Takže si definuju entity přes anotace, nastavuji typ dat, jointy, subkolekce (objednávka->položky) atd. No a pak už se jen vytvoří Entity Manager a instancujou entity.
Dále mám navázane komponenty, kterým se předá Entita(kolekce) a vytvoří se control s tabulkou, včetně paginatoru a sub tabulky(tady vývoj zamrznul – potřebuju dynamické snippety :( ) nebo formulář s validací dat (bráno z definice entity). Data čtu až když jsou opravdu potřeba a ne při vytvoření entity, zabraňuje to vytváření duplicitních entit, optimalizace zápisu do db…
… Kdyby to někoho zajímalo, mohu se podělit.
určitě to hoď na github…
- David Grudl
- Nette Core | 8212
Základní implementaci mám hotovou, ale přemýšlím, jak finálně
pojmenovat jednotlivé třídy. Názvy Row
nebo
Connection
mi připadají příliš obecné, byť ve jmenném
prostoru dávají smysl (Nette\Database\Row
).
- Honza Marek
- Člen | 1664
David Grudl napsal(a):
Základní implementaci mám hotovou, ale přemýšlím, jak finálně pojmenovat jednotlivé třídy. Názvy
Row
neboConnection
mi připadají příliš obecné, byť ve jmenném prostoru dávají smysl (Nette\Database\Row
).
A o tom jsou jmenné prostory :)
- Jan Tvrdík
- Nette guru | 2595
Pokuď někomu vadí používaní Row
, tak si může doplnit
use Nette\Database as DB
a používat pakDB\Row
.
- JakubJarabica
- Gold Partner | 184
mkoubik napsal(a):
Jak jde
Nette\Database\Row
dohromady s model !== databázová tabulka? Nebo jsem mimo a moc si toho domýšlím?
Pri používaní dibi máš DibiRow kľudne aj ako JOIN viacerých tabuliek. A vystupuje to ako jeden riadok. To isté s Datagridom ;)
- David Grudl
- Nette Core | 8212
Ještě pár poznámek:
- NotORM a dibi budou nadále samostatné knihovny, Nette\Database není plnohodnotnou náhradou
- Nette\Database bude narozdíl od dibi založena čistě na PDO. Myslím, že v dnešní době už je PDO dostatečně rozšířené a doufám, že i vyzrálé. Výhodu vidím v tom, že netřeba vynalézat kolo a psát drivery na základní operace. Ačkoliv teda bez driverů se ani tady člověk neobejde…
- skládání dotazů v PDO je oproti dibi značně omezené a ani v Nette\Database nebude podpora modifikátorů. Nicméně nemělo by to ve výsledku ničemu vadit, prostě se použije trošku jiný (nikoliv složitější) styl práce.
- získávání dat ala NotORM bude mít asi trošku jinou syntax než v originálním NotORM, aby to nemátlo, bude se třída jmenovat jinak
- persistence objektů nebo data-mapper se objeví až později
- JakubJarabica
- Gold Partner | 184
paranoiq napsal(a):
stejně jako sis mohl napsat vlastní DibiIngresDriver, můžeš si napsat i vlastní PDO ovladač (a nemusí to být v céčku!). stačí napsat vlastní rozšíření tříd PDO a PDOStatement
Nemyslím si, že bude treba: http://community.ingres.com/wiki/PDO_Ingres.
- _Martin_
- Generous Backer | 679
@JAM3SoN, @Jan Tvrdík:
Myslím, že @mkoubik měl na mysli entitu.
Třída řádek
evokuje paralelu s řádkem relační DB, byť by
to bylo více JOINů, entita naopak může obsahovat další entity (tedy něco,
co si pod pojmem řádek
jen těžko představit).
Čili k zamyšlení: pokud je do budoucna v plánu persistence objektů a
data-mapper, pojmenování entita
by mohlo charakter té třídy
vystihovat lépe než pojmenování řádek
.
- Filip Procházka
- Moderator | 4668
Entita má význam při spojení s data-mapperem, protože řádek obsahuje všechny data z jednoho vráceného záznamu, kdežto entity zastupují ty data ve struktuře.
- Lopo
- Člen | 277
JAM3SoN napsal(a):
Nemyslím si, že bude treba: http://community.ingres.com/wiki/PDO_Ingres.
to som nasiel ale mal som s tym davnejsie problemy pri rozbiehani a vyvoj je co som to kontroloval nijaky uz niekolko rokov …
paranoiq napsal(a):
stejně jako sis mohl napsat vlastní DibiIngresDriver, můžeš si napsat i vlastní PDO ovladač (a nemusí to být v céčku!). stačí napsat vlastní rozšíření tříd PDO a PDOStatement
mno ak to bude az take jednoduche tak potom (snad) v poho
- Lopo
- Člen | 277
teraz po zbeznom pozreti Database mam dotaz:
- ako riesit prefixovanie tabuliek ?
v dibi bola moznost nastavit globalny prefix … co som ohackoval aby som vedel pouzivat connection-specific prefix …
ale v tomto novom Database nevidim ziadnu moznost nastavenia prefixovania … resp jedine podedenim a prepisanim viacerych metod co mi zrovna idealnym riesenim nepripada
- Tharos
- Člen | 1030
Je to řešit například takhle. No, je to trošku škrabání se levou rukou kdo ví kde… Vestavěná podpora pro prefixy by se určitě hodila.
- Ondřej Mirtes
- Člen | 1536
Já nějak nechápu, proč aktuální Nette\Database !== dibi, ale něco nového a bez té příjemné dibi syntaxe, DibiFluent a dalších.
- JakubJarabica
- Gold Partner | 184
@Oggy:
Máš ukážkový kód ako to používaš? NotORM mám prečítanú
dokumentáciu, ale aktuálne si neviem predstaviť ako by som príklad nižšie
napojil na Latte šablóny. Podľa príkladu tu: http://zdrojak.root.cz/…ne-s-notorm/#…, konkrétne
táto časť:
<?php
foreach ($products as $product) {
echo "<h3>" . htmlspecialchars($product["name"]) . "</h3>\n";
list($suppliers) = $product->product_supplier()->aggregation("COUNT(*)");
echo "<p>Cena: $product[price] Kč, dodavatelů: $suppliers</p>\n";
}
?>
Ako pretransformujem ten agregačný dotaz do latte?
Chcel by som mať niečo takéto:
<?php
{foreach $produkty as $produkt}
<h3>{$produkt["name"]}</h3>
{$produkt_suppliers}
{/foreach}
?>
.. alebo bez agregácie:
<?php
{foreach $produkty as $produkt}
<h3>{$produkt["name"]}</h3>
{if count($produkt_suppliers)>0}
<ul>
{foreach $produkt_suppliers as $supplier}
<li>{$supplier["name"]}</li>
{/foreach}
</ul>
{/if}
{/foreach}
?>
.. teda neviem ako sa zbaviť toho list(..) v šablóne. Nie je to tam pekné a radšej by som v render* naplnil $products a možno nejako $suppliers.
- Oggy
- Člen | 306
JAM3SoN napsal(a):
@Oggy:
Máš ukážkový kód ako to používaš?
vlastně stejná struktura jako u toho ukázkové kódu:
tabulka entry = appliaction, entry_tag = application_tag, project = author ..
jen pro lepší pochopení
model:
<?php
static function recentEntries() {
return self::$notORM->entry("date >= CURDATE()-3")
->select('entry.*, project.name, project.archived')
->where('user_id',Environment::getUser()->getIdentity()->getId())
->order("date DESC");
}
?>
šablona:
<?php
<table>
<tr n:foreach="Entry::recentEntries() as $entry">
<td>{$entry["time"]}</td>
<td>{$entry["name"]}</td>
<td>
<span n:foreach="$entry->entry_tag() as $entry_tag">
{$entry_tag->tag['name']}
</span>
<p n:if="$entry['description']">{$entry['description']}</p>
</td>
<td>{$entry['date']|date}</td>
</tr>
</table>
?>
vygeneruje tyto dotazy:
<?php
SELECT entry.*, project.name, project.archived FROM entry LEFT JOIN project ON entry.project_id = project.id WHERE (date >= CURDATE()-3) AND (user_id = '1') ORDER BY date DESC
SELECT entry_id, tag_id FROM entry_tag WHERE (entry_tag.entry_id IN ('11', '12'))
SELECT id, billable, name FROM tag WHERE (tag.id IN ('15', '16'))
?>
Jak moc je to správně nevím..
S očekáváním čekám:-) co vyplave z té Databázové vrstvý pro Nette
Editoval Oggy (15. 12. 2010 15:34)
- Oggy
- Člen | 306
JAM3SoN napsal(a):
Ako pretransformujem ten agregačný dotaz do latte?
Chcel by som mať niečo takéto:<?php {foreach $produkty as $produkt} <h3>{$produkt["name"]}</h3> {$produkt_suppliers} {/foreach} ?>
tady myslím že musí být něco jako..
<?php
{$produkt->produkt_suppliers()}
?>
Editoval Oggy (15. 12. 2010 15:37)
- vrana
- Člen | 131
JAM3SoN napsal(a):
list($suppliers) = $product->product_supplier()->aggregation(„COUNT(*)“);
Použití v šablonách byl hlavní důvod, proč se v této oblasti
syntaxe už před delší dobou změnila. Nyní lze použít
$product->product_supplier()->count("*")
. Viz http://www.notorm.com/#api
- JakubJarabica
- Gold Partner | 184
Veľmi pekne dakujem obom! Zjavne jeden z dvoch osobných projektov prepíšem z Doctriny do NotORM, nech mám čo porovnávať :)
- Tharos
- Člen | 1030
Jakube, nestálo by za to někde více demonstrovat možnosti NotORMu při použití s Nette? I když jsem si vědom, že o tom je jedno ze Tvých školení, a tak chápu, že možná nechceš hromadně rozdávat jisté know-how. Jak už jsem psal, NotORM jsem na jednom Nette projektu testoval, ale setkal jsem se s problémy, u kterých mi nyní připadá, že do jisté míry vyplývaly z mé neznalosti NotORMu.
Pracuješ s NotORM objektem přímo v šabloně? Co když poté dojde k chybě a část šablony už je na výstupu, není s tím problém? Anebo s NotORMem pracuješ v Presenterech? Jak řešíš modely, kde potřebuješ více, než jen „protlačit joinovaná data“ z databáze?
- Oggy
- Člen | 306
Tharos napsal(a):
Jakube, nestálo by za to někde více demonstrovat možnosti NotORMu při použití s Nette?
Já se také přikláním k prosbě o nějaký tutoriál na použití spolu
s Nette ..
A třeba i na nějaké méně používáné příkazy.. na hromadný insert,
využítí při transakci apod.
Editoval Oggy (15. 12. 2010 16:24)
- vrana
- Člen | 131
Tharos napsal(a):
Jakube, nestálo by za to někde více demonstrovat možnosti NotORMu při použití s Nette?
Já si své know-how nijak nestřežím a snažím se ho dávat k dispozici i mimo školení. Jen je vždycky potřeba najít vhodnou formu. Konkrétně návrh modelu využívající NotORM plánuji natočit jako třetí díl video-tutoriálu srovnávajícího NotORM a Doctrine 2.
S objekty třídy NotORM_Result
i NotORM_Row
pracuji rovnou v šabloně. Co se chyb týče, tak jejich zpracování
záleží na tom, zda jsou lokální nebo globální. Globální chyby (jako
třeba že jsem na detailu článku, který se nepodaří načíst) vyhazují
výjimku z prezenteru a způsobí 404 nebo 500, lokální chyby (jako třeba
nepodařený výpis diskuze u zobrazeného článku) se ošetřují lokálně
v šabloně. Viz http://php.vrana.cz/…-vyjimky.php a navazující
článek.
- vrana
- Člen | 131
Oggy napsal(a):
Já se také přikláním k prosbě o nějaký tutoriál na použití spolu s Nette ..
A třeba i na nějaké méně používáné příkazy.. na hromadný insert, využítí při transakci apod.
Podporu hromadného insertu jsem nedávno přidal přes
NotORM_Result::insert($row1, $row2, ...)
. Na transakce žádná
obálka není, ty je potřeba volat přímo přes PDO.
- JakubJarabica
- Gold Partner | 184
Práve na základe videí o Doctrine vs. NotORM som sa rozhodol prepísať „menší“ projekt do NotORM aby som si to poriadne odskúšal. Je to oveľa menšie zlo ako statické modely ^_^ Príde mi ako ideálny kandidát na webíky, kde netreba používať Versionable, Translatable či Tree interface-y Doctriny. Kde ideálne by som mohol klásť prípadné dotazy? php7.org zrejme nefunguje. A podľa ohlasov vidím, že viac ľudí zaujalo NotORM :)