Nette\Database – vypnutí cache v config.neon
- Vojtěch Dobeš
- Gold Partner | 1316
Mohlo by v configu pomoci:
services:
nette.database.default:
setup:
- setCacheStorage( NULL )
Místo default
případně odpovídající název
připojení.
Editoval vojtech.dobes (10. 5. 2012 15:37)
- enlilcz
- Člen | 7
Nejnovější dev jsem nezkoušel, ale teď třeba na pgsql když udělám TableSelection a zavolám nad tím order(„id“) tak si zakešuje že selectnul id a když potom zavolám další TableSelection tak už mi vrátí jen ten jeden sloupec a ActiveRow se tváří, že v tabulce je jen sloupec id. Po smazání keše to projde zas jen do klauzule order().
Edit: mám verzi 2.0.3
Editoval enlilcz (10. 5. 2012 17:03)
- Filip Procházka
- Moderator | 4668
enlilcz napsal(a):
vojtech.dobes: tak tohle bohužel nefunguje
Bohužel jsi nenapsal, co to generuje do containeru v tempu a jestli to něco hlásí, takže ti nemůžeme poradit, co máš upravit.
Ale střelím od boku, voláš ty metody nad stejným objektem? nebo si
vytváříš nový Table\Selection
?
- llook
- Člen | 407
Ale hlavní průšvih je, že nelze zapsat do configu, aby vytvořil DB spojení bez Cache.
Taky jsem teď v 2.0.8 narazil na problém, který se nejsnáz vyřešil vypnutím cache (asi to byl bug, ale nechce se mi v tom víc vrtat). Dá se použít DevNullStorage:
services:
nette.database.default:
setup:
- setCacheStorage( Nette\Caching\Storages\DevNullStorage() )
- TrubiT
- Člen | 10
llook napsal(a):
Ale hlavní průšvih je, že nelze zapsat do configu, aby vytvořil DB spojení bez Cache.
Taky jsem teď v 2.0.8 narazil na problém, který se nejsnáz vyřešil vypnutím cache (asi to byl bug, ale nechce se mi v tom víc vrtat). Dá se použít DevNullStorage:
services: nette.database.default: setup: - setCacheStorage( Nette\Caching\Storages\DevNullStorage() )
Suprové, to se mi taky hodilo. Rozhodl jsem se používat Nette\Database,
ale zatím s tím mám jen problémy. Poslední problém jsem musel řešit
tímto způsobem.
Upřímě začínám pochybovat o celé efektivitě tady těch nástrojů.
Když jsem používal dibi a psal jsem si všechny dotazy ručně, tak jsem měl
jistotu, že dotaz bude rychlý a bude jich jen tolik, kolik chci. Dotazy
fungovali napoprvé a bez chyb. Za hodinu ztracenou řešením chyb tady
s tím, bych napsal dalších 50 dotazů v dibi. Dávám tomu pořád šanci,
asi to má dětské nemoci a já s tím nemám příliš velké zkušenosti,
nicméně mě to zatím nenadchlo :)
Díky za toto řešení
- kedrigern
- Člen | 102
Jen pro úplnost: Při vývoji (když rychle měním soubory, přepisuji adresáře, měním strukturu DB etc.) se mi také jednou za čas stane, že se DB cache neivaliduje, když je to potřeba a stále hází dotazy ze starší verze.
Např se mi stává, že se:
$connection->table('someTable')->select('*');
interpretuje jako:
SELECT id, name FROM someTable
ale já jsem mezitím změnil DB a chci
SELECT id, name, surname FROM someTable
Nevidím do toho, tak to neřeším. Ale tuto volbu začnu používat. Děkuji moc.
- hrach
- Člen | 1838
Pokud selectnes data, neprectes z nich nic a selectnes je pak po uloznei cache znovu, tak ano, bude tam jen id, protoze id sloupec byl jediny, ktery se predtim pouzil, a to prosim ne na zaklade toho, ze si podle toho radit, ale podle toho, ze se pouziva jako index asociativniho pole.
$connection->table(‚someTable‘)->select(‚*‘);
by v zadnem pripade nemel hazet dotaz z nacachovanymi sloupci. na 99 % je chyba nekde jinde… u tebe, nevim.