Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [ZendFramework] zagnieżdżone transakcje
Forum PHP.pl > Forum > PHP > Frameworki
nospor
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?
Master Pain
A może dodanie parametru do funkcji, w której jest/ma być transakcja, np.:

  1. function jakasFunkcja($parametr1, $parametr2, $useTransaction = true) {
  2. if(true === $useTransaction) {
  3. //rozpoczęcie transakcji
  4. }
  5.  
  6. //I tak samo dla roll'a i commit
  7. }
nospor
Nie, to nie jest satysfakcjonujące mnie rozwiązanie.
nospor
@up jest to rozwiązanie o którym juz pisalem:
Cytat
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.


Podejrzewam ze na tym wlasnie się skonczy, iż będę musiał spłodzić taki twor.
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.