Ako pracovať s metodou flush() v doctrine2
- PhelixMad
- Člen | 36
Pekny deň, keď som zistil, že DAO neni dobre používať a mam použivat metodu persist a flush, tak som sa ako si zasekol pri vytvarani servisní vsrtvy a hlavne u metod pro pridavani dat do databazi. A ako si teraz nemam potuchy ako by mohla vypadať povedzme metoda pre pridanie článku, hlavne ked nie je dobre mat flush priamo v tej metode ak som správne pochopil :)
Mohol by ma niekto popostrčiť prosim vás alebo ukázať mi to na príklade? Ďakujem :)
- Oli
- Člen | 1215
Doufám, že nebudu psát blbosti. Jak to chápu já, tak metoda save z DAO sloužila jen na jednoduché uložení. Něco ve smyslu: Mám článek, nastavím mu title, slug, text, datum a uložím. V takovém případě je použití metody save validní.
Problém nastává, pokud zároveň vytváříš autora, nebo pokud edituješ počet komentářů u článku a ukládáš komentář. V takovém případě by jsi měl použít něco jako:
$articleEntity->commentNumber = 12;
$articleEntity-> // ...
$em->persist($articleEntity);
$comment->user = $this->user->getIdentity();
$comment->text = $text;
$comment->date = new Nette\DateTime;
$comment->article = $articleEntity;
$em->persist($comment)->flush();
Je to proto, že pracuješ s víc entitama a pokud by jsi hned po upravení článku zavolal save, tak by to prý za určitých okolností mohlo dělat bordel. Řídil jsem se tím, že když jsem pracoval s víc entitama, tak jsem metodu save nepoužíval, takže nevím co to způsobuje za problémy…
Zkus se podívat na přednášku od @mrtnzlml https://www.youtube.com/watch?…. To by ti mělo osvětlit jak to je s tím persist a flush.
A možná na závěr k tvé otázce: Já si předávám em přímo do
komponenty, např. ArticleForm
- Marek Šneberger
- Člen | 130
@PhelixMad To záleží, kdy ty data chceš dostat do databáze. Pokud hned tak ano, nejlepší je to v modelu. Pokud víš že potom na to něco navazuje tak je fajn tu entitu persistnout (nahraje se do identity mapy a připraví se k flushnutí), pak uděláš pár dalších operací a nakonec to všechno „flušneš“ do databáze v jedný transakci.
- PhelixMad
- Člen | 36
@MarekŠneberger Díky trošku mi to pomohlo len mi chybal príklad ale ten som našiel našťastie na zdrojaku :)