Ako pracovať s metodou flush() v doctrine2

Upozornění: Tohle vlákno je hodně staré a informace nemusí být platné pro současné Nette.
PhelixMad
Člen | 36
+
0
-

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
+
0
-

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

PhelixMad
Člen | 36
+
0
-

Tak ako viem ako poslat cez persist a flush data do tabulky ale neviem ako to rozumne obaliť do metody (modelu) a ci v tej metode ma byt aj rovno flush?

Marek Šneberger
Člen | 130
+
+1
-

@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
+
0
-

@MarekŠneberger Díky trošku mi to pomohlo len mi chybal príklad ale ten som našiel našťastie na zdrojaku :)