MySQL, vnořené transakce a inTransaction()
- lumen
- Člen | 32
Ahoj, používám transakce a MySQL (InnoDB). V aplikaci mám několik modelů a v jejich funkcích volám beginTransaction(), commit() atp. Všechno je to v pořádku, dokud z modelu nevolám funkci modelu jiného, kde už spuštění transakce je. MySQL vnořené transakce neumí a zde je problém.
V nějakých starších verzích byla (tuším v Contextu) funkce inTransaction(), kterou se dalo zjisti, že jsem v transakci a další transakci už jsem nespouštěl. Nová verze nette ale žádnou takovou funkci nemá. Jak bych to měl řešit nyní? Nerad bych ty transakce odstraňoval…
Díky moc
- h4kuna
- Backer | 740
Metody které popisuješ jsou v PDO a to je dostupné v Connection Možná by se ti hodilo něco v tomto duchu pokud transakce neexistuje tak založit jinak se vyrobí savepoint.
Editoval h4kuna (24. 1. 2014 10:27)
- lumen
- Člen | 32
@Majkl578: Díky, to jsem nevěděl, že to Doctrine má. Bohužel jsem před dokončením aplikace a na přechod na Doctrine z Nette\Database už nemám dostatek času. A na dodělání do Nette\Database také ne :)
@h4kuna: Díky, nicméně v tom Connection už to není – i v tom odkazu co posíláš je to „@deprecated". O něco podobného co posíláš (v druhém odkazu) jsem se už snažil na základě tady tohoto příspěvku . Tam jsem narazil na to, že už neexistuje inTransaction(). V tom tvém zasílaném odkazu se používá něco jako "nestable()“. Což nevím jestli v nette něco takového je?
- h4kuna
- Backer | 740
Odkaz míří na to jak se dostat k instanci PDO, kde pak voláš zmiňované metody. beginTransaction, commit, rollBack
Metoda nestable() když se koukneš tak jen ověřuje zda driver použitý v PDO obsahuje pgsql nebo mysql. Pro jinou databázi to autor nedělal. V jeho případě $this = instance PDO.
Editoval h4kuna (24. 1. 2014 15:48)