NDB – Discovered reflection a modified data

Upozornění: Tohle vlákno je hodně staré a informace nemusí být platné pro současné Nette.
Ivorius
Nette Blogger | 119
+
0
-

Když si proiteruju Selection a do ActiveRow si přidám vlastní prvek (např. objekt price, který mi provádí nějaké výpočty) , tak mi potom občas při prvním požadavku na ten price vyhodí

PDOException
No reference found for $products->price

Jakmile dám ctrl+f5, tak to už funguje.

Používám novou verzi z github nette a Discovered reflection.

frosty22
Člen | 373
+
0
-

Myslím si, že to je cachí vybraných sloupců – jelikož pokud explicitně nenastavíš, přes metodu select, jaké sloupce se mají vybrat z databáze, tak on při nové query vybere vše, ale následně už vybere jen ty, které jsi použil, a takto si query nacachuje, pokud však upravíš query, tak použije z cache ony sloupce, ale zjistí, že jsi navíc použil „price“, takže přidá ještě do výběru „price“ a při dalším spuštěním je to OK.

Ivorius
Nette Blogger | 119
+
0
-

A napadá tedy někoho jak to vyřešit?

enumag
Člen | 2118
+
0
-

Už jsem před nějakou dobou tenhle problém bez odezvy reportoval. Problém je prostě v tom, že ActiveRow dovolí manipulaci pouze s reálně vybranými sloupci a ne s těmi, které se tam objevit „mohou“, protože jsou v db.

Mohlo by ti pomoct přidání $row->price;, aby se selection na daný sloupec vždy podívalo, nic s ním neudělalo, ale při dalších dotazech už ho vracelo. Je to sice hack, ale lepší řešení neznám. Jo a nezapomeň smazat cache.