Hodnota v entite je stara

Upozornění: Tohle vlákno je hodně staré a informace nemusí být platné pro současné Nette.
nette.programator
Člen | 4
+
0
-

Ahoj,
mam tu PHP kod, ktery pouziva LeanMapper, u ktereho mam podezreni, ze obsahuje osklivou chybu.
Kod je velice jednoduchy, ve zkratce by se dal shrnout takto:

// nacte aktualniho uzivatele z user repository
$user = $this->getUser();

// ... zde se neco deje, trva to dlouho, radove sekundy, ale i k 10 sekundam ...
if (!$user->computeRequestsLeft()) {
// ...
}


// pokud se to hlavni povedlo, odecteme uzivateli kredit z uctu
$user->requestsLeft = $user->requestsLeft - 1;
$userRepository->persist($user);

// ... zde se posle vysledek ...

Ja mam pocit, ze takovyto kod muze nespravne zapsat pocet zbyvajicich kreditu do DB po odecteni, pokud mezitim prijde jiny pozadavek, ktery dobehne drive.

Jak se takova vec opravi? Potreboval bych pred odectenim kreditu „znovu nacist“ celeho usera do $user, abych mel v PHP aktualni hodnoty. Jak to udelat?

Edit: upresneni – LeanMapper

Editoval nette.programator (2. 5. 2015 17:20)

bazo
Člen | 620
+
0
-

$em->refresh($entity)

nette.programator
Člen | 4
+
0
-

diky za odpoved, ale co v tve odpovedi je $em ?
refresh metody jsem u niceho nenasel

Šaman
Člen | 2666
+
0
-

Co používáš za repozitáře? em je entity manager z Doctrine.

nette.programator
Člen | 4
+
0
-

ah, omlouvam se, jsem nespecifikoval dobre zadani – pouzivam LeanMapper

Šaman
Člen | 2666
+
0
-

A co ti brání si uživatele znovu načíst podle jeho id? Jinak LeanMapper má svoje fórum jinde.

nette.programator
Člen | 4
+
0
-

bal jsem se nejakeho kesovani nebo tak, ale uz mi bylo vysvetleno, ze tam nic takoveho neni, takze skutecne pouze zavolat znovu getUser, coz nacita znovu z db entitu a je to

dik moc za pomoc