Hejka,
załóżmy że mamy rozpoczętą transakcję. Coś tam robimy i w tym coś tam wykonujemy jakąś inną funkcję. Funkcja ta niezależnie od kodu, w którym została wykonana, również rozpoczyna własną transakcję. Oczywiście dla mysql wywali to błąd.
Jak to rozwiązujecie w ZF? Są jakieś mechanizmy na to?
Ja do tej pory we własnym frameworku robiłem to tak, ze metoda beginTransaction incrementowała licznik rozpoczeć. Gdy licznik byl wiekszy od 1 to nie rozpoczynała fizycznie transakcji w bazie i był spokoj. Oczywiscie metody rollback i commit zmniejszały licznik i gdy dochodzil do zera to wykonywały fizycznie na bazie rollbacl lub commit.
Czytając rozne źródła o ZF tam nie ma czegoś takiego. Niektórzy proponowali sprawdzac czy jest rozpoczęta transakcja czy nie i w zależności od tego samemu rozpocząć lub nie. Daje to dodatkowy narzut kodu i wcale nie jest takie idealne.
Innym rozwiązaniem byłoby stworzenie klasy pomocniczej, która dziedziczy po DB i tam nadpisac metody begin, commit, rollback i dodać wspomnianie wyżej liczniki. Musiałbym jednak pisać taką klasę dla kazdego wykorzystywanego sterownika.
Czy radzice sobie jakoś inaczej w tej kwestii?