Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> [Doctrine] zwiększenie stanu magazynowego
zordon
post
Post #1





Grupa: Zarejestrowani
Postów: 358
Pomógł: 78
Dołączył: 4.11.2008
Skąd: Kraków

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


Witam,
czy Doctrine (póki co 1.2) obsługuje zmianę wartości pól w stylu:
stan_magazynowy = stan_magazynowy + 10

W tej chwili robię:
  1. $row->stan_magazynowy = new Doctrine_Expression('stan_magazynowy + 10');

Wadą tego rozwiązania jest to, że obiekt PO ZAPISANIU zamiast aktualnej wartości liczbowej w polu stan_magazynowy posiada to co przypisałem, czyli Doctrine_Expression('stan_magazynowy + 10')
"Odświeżam" ponownie obiekt ręcznie ale zastanawiam się, czy ktoś nie wymyślił jakiegoś bardziej eleganckiego i automatycznego rozwiązania

Ten post edytował zordon 29.02.2012, 14:09:50
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi
zordon
post
Post #2





Grupa: Zarejestrowani
Postów: 358
Pomógł: 78
Dołączył: 4.11.2008
Skąd: Kraków

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


używam transakcji w tabelach innodb i rozwiązanie stan_magazynowy=stan_magazynowy-x wciąż wydaje mi się lepsze.
W transakcji rekordy nie mogą nadpisywać tych samych rekordów, ale mogą je czytać, czyli w zapisie "stan_magazynowy=x" problem pozostaje. W rozwiązaniu "stan_magazynowy=stan_magazynowy-x" najgorsze, co może się stać to "wyjechanie" ze stanem magazynowym poniżej zera, ale to można obsłużyć już po zakończeniu transakcji (np cofając problematyczne zamówienie już po zakończeniu transakcji).
Wiem, że można zablokować rekordy również do odczytu ale tego tematu nie znam zbyt dobrze. Z tego co kojarzę to odczyt zablokowanego rekordu przez inną transakcję spowoduje wystąpienie błędu, a nie o to przecież chodzi.

Mógłbyś rozwinąć trochę temat i podać najlepszą praktykę rozwiązania tego typu problemu?
Go to the top of the page
+Quote Post

Posty w temacie


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: 15.10.2025 - 21:18