![]() |
![]() |
![]()
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ę:
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 |
|
|
![]() |
![]()
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? |
|
|
![]() ![]() |
![]() |
Aktualny czas: 15.10.2025 - 07:30 |