$context->table(‚my_temporary_table‘) nenajde temporary tabulku
- Honza.Mottl
- Člen | 104
$context->table(‚my_temporary_table‘)->fetchAll() nenajde temporary tabulku. Da se s tim neco delat?
Workaround:
Pokud pouziji $context->query(‚select * from
my_temporary_table‘)->fetchAll() tak se na temporary table dostanu. ale
v Nette\Database\Table\IRow[] eni indexovane podle primarniho klice jako tomu
je pres $context->table(‚my_temporary_table‘)->fetchAll(). Asi budu
muset vysledek preorat nastavit tam primarni klic.
Existuje nejaky zpusob jak pouzit $context->table(‚my_temporary_table‘) na temporary tabulku? Diky
- Honza.Mottl
- Člen | 104
Diky, potrebuji vice sloupcu. Obesel jsem to, vytvoril jsem si pole se spravnym klicem takto :
$polozky = [];
$fetchResult = $this->database->query('SELECT * from pripad_polozka_tmp')->fetchAll();
if ($fetchResult) {
foreach ($fetchResult as $key => $item) {
$polozky[$item[self::PRIPADPOL_COLUMN_ID]]= $item;
}
}
- Honza.Mottl
- Člen | 104
Nezkousel jsem to. Podle dokumentace fetchPairs vraci dvojice klic, jiny sloupec. Ja potrebuji vsechny sloupce tabulky, dva mi nestaci.
- Honza.Mottl
- Člen | 104
Diky, zase jsem se neco naucil. Na normalni tabulce to funguje dobre jak jsi popsal. Ale na temporary tabulce to skonci na exception „Nette\InvalidArgumentException Table ‚pripad_polozka_tmp‘ does not exist“.
Ony ty temporary tabulky jsou v mysql udelany tak trochu mimo system. DML prikazy fuguji, ale v data dictionary je zapiraji a z toho plynou vsechny problemy, protoze Nette tabulku v data dictionary nenajde. A taky je divne, ze se tabulka musi v session pokazde znovu vytvaret. Kdyz to ale clovek vi, tak se s tim delat da.
Delaval jsem s temporary tabulkami v Oraclu, tam se definicne temporary tabulka vytvori jednou a je videt v data dictionary. Data ma kazda session svoje, ale definice je spolecna.
- Honza.Mottl
- Člen | 104
Ono to vypadne uz na $context->table(‚my_temporary_table‘) a na fetchPairs uz nedojde.