Nextras ORM – zacyklení eventů

dms
Člen | 94
+
0
-

Ahoj, řeším celkem banální problém. Při jakékoli změně (přidání, update, odebrání) položky z objednávky potřebuji aby se u objednávky automaticky přepočetl celkový počet položek. Chtěl bych to řešit automaticky přes eventy tedy do onAfterPersist() a onAfterRemove() jsem přidal přepočet celkového kusů položek objednávky a objednávku persistnu. Problém je že při persistu objednávky se zavolá zase persist položek a ten zavolá zase persist objednávky a tak dál dokola… Nevím jestli na to jdu úplně špatně nebo jsem něco přehlédl. Každopádně to lze vyřešit celkem jednoduše že objednávku nepersistnu aby nedošlo k zacyklení ale místo toho přes connection updatnu ručně sloupec total_items_quantity u objednávky nebo druhou možností je že vypnu cascadu persitu u itemů objednávky. Obě tyhle varianty fungují ale ani jedna se mi úplně nelíbí. Nějaký nápad jak to lépe vyřešit?

Marek Bartoš
Nette Blogger | 1274
+
0
-

Však to můžeš dát do onBefore* eventů, aby se data uložila současně. A myslím že v tomhle případě chceš onBeforeInsert a onBeforeDelete. onBeforePersist se zavolá i v případě update

Editoval Marek Bartoš (15. 2. 2022 19:36)

dms
Člen | 94
+
0
-

Už jsem na to přišel. V eventlisteneru nesmím použít persistAndFlush() ale jen persist(). Tím se to nezacyklí a vše funguje