Doctrine 2 – nefunguje ukládání při přístupu přes jinou entitu

kejlicz
Člen | 201
+
0
-

Ahoj.
**
UPDATE : Nedělá to jen při přísrtupu přes vazbu, ale i při přáci přímo s entitou.**

Prosím o radu s Doctrinou. Narazil jsem na jednu věc, které nerozumím.

Mám třeba entitu Visit, kde mám vazbu 1:N na entitu Client.

toto normálně funguje

$visit->getClient()->getName()

když ale chci něco u klienta upravit a předtím z něho nečtu

$visit->getClient()->setNeco()

tak to nejde. Prostě to ten SQL dotaz vůbec neudělá.

Když předtím z entity Client něco načítám :

$visit->getClient()->getName();

a potom hned ukládám

$visit->getClient()->setName("Josef");

tak už se editace provede.

Čím to může být?

Pokud to chápu, tak doctrina si při nějaké změně nejdřív data načte a pokud jsou to původní stejná, update se ani neprovede. Pokud se snažím nastavit třeba jméno, klienta, což je string, tak si ty data doctrina předem načtě a pokud jsou jiná, provede update. Pokud se ale snažím nastavit boolean nebo smallint, tak tak mi to ten předcházející SELECT na získání původních hodnot neudělá a jelikož je tam asi defaultně zapnutý nějaký lazy loading, bere to, že je třeba původní hodnota 0 a pokud nastavuji taky 0, tak to update neudělá, i když ve skutečnosti byla původní hodnota třeba 1.

Když vypnu lazy loading v definici entity fetch=„EAGER“, tak se to začne chovat tak jak požaduji. Je to normální?

Díky moc za radu.

Editoval kejlicz (21. 4. 2020 14:15)

fizzy
Backer | 49
+
0
-

A na 100% sa vola aj flush() metoda?

kejlicz
Člen | 201
+
0
-

Tak chyba byla samozřejmě u mně. Používám Nettrine a EntityManager jsem nezískával přes jejich EntityManagerDecorator, ale přímo EntityManager.

fizzy
Backer | 49
+
0
-

odporucam vsade pouzivat interface Doctrine\ORM\EntityManagerInterface

Felix
Nette Core | 1245
+
0
-

V aktualni verzi Nettrine balicku se s touto chybou nepotkavam.