Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [ZendFramework] zagnieżdżone transakcje
nospor
post
Post #1





Grupa: Moderatorzy
Postów: 36 557
Pomógł: 6315
Dołączył: 27.12.2004




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?
Go to the top of the page
+Quote Post
Master Pain
post
Post #2





Grupa: Zarejestrowani
Postów: 71
Pomógł: 1
Dołączył: 5.04.2007
Skąd: Jarocin

Ostrzeżenie: (0%)
-----


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. }
Go to the top of the page
+Quote Post
nospor
post
Post #3





Grupa: Moderatorzy
Postów: 36 557
Pomógł: 6315
Dołączył: 27.12.2004




Nie, to nie jest satysfakcjonujące mnie rozwiązanie.
Go to the top of the page
+Quote Post
l3l0
post
Post #4





Grupa: Zarejestrowani
Postów: 94
Pomógł: 16
Dołączył: 24.07.2009
Skąd: Gdańsk

Ostrzeżenie: (0%)
-----


http://blog.ekini.net/2010/03/05/zend-fram...d_db-and-mysql/
Go to the top of the page
+Quote Post
nospor
post
Post #5





Grupa: Moderatorzy
Postów: 36 557
Pomógł: 6315
Dołączył: 27.12.2004




@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.
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
2 Użytkowników czyta ten temat (2 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 19.09.2025 - 22:51