Oznámení
Fluent a fetchAll() – získání srozumitelného výsledku
před 8 lety
- Václav M.
- Člen | 34
Připravil jsem si funkci PripravnaSQL
function PripravnaSQL($VychoziDotazy, $VychoziPolozky)
{
if( !is_array($VychoziDotazy) )
{
return dibi::$VychoziDotazy($VychoziPolozky[0], $VychoziPolozky[1]);
}
else
{
return dibi::$VychoziDotazy[0]($VychoziPolozky[0])
->$VychoziDotazy[1]($VychoziPolozky[1]);
}
}
a následovně jí takto použil
$Vysledek = PripravnaSQL( array("select", "from"), array("PopisSouboru", "Sprava_SeznamNahranychSouboru"));
$Vysledek -> select("NazevSouboru_Stary")->as("PuvodniNazevSouboru");
$Vysledek -> select("NazevSouboru_Novy")->as("NazevSouboru");
$Vysledek -> execute();
$Vysledek -> fetchAll();
ale zjistil jsem, že i přes použití fetchAll výsledek nemá tvar toho celkem jednoduchého pole, z kterého jsou veškeré údaje ihned čitelné – jako kdybych ten příkaz napsal ve tvaru
$Vysledek = dibi::select("NazevSouboru_Stary")->as("PuvodniNazevSouboru")
->select("NazevSouboru_Novy")->as("NazevSouboru")
->select("PopisSouboru")
->from("Sprava_SeznamNahranychSouboru")
->execute()
->fetchAll();
před 8 lety
- HosipLan
- Moderator | 4693
Nějak nechápu ten účel funkce PripravnaSQL
, proč to
komplikuješ? Nemá to žádnou přidanou hodnotu.
Na formátování výsledného pole se používá
fetchAssoc
, třeba:
$result->fetchAssoc('id');
výsledkem bude
array(1 => DibiRow , 2 => DibiRow )
před 8 lety
- Václav M.
- Člen | 34
Já samozřejmě vím o funkci fetchAssoc – i když zatím používám raději fetchAll – nebo fetchSingle, když potřebuji jednu jedinou hodnotu.
Jde spíš o to, že jsem čekal, že v té proměnné $Vysledek, pokud použiju postup s funkcí PripravnaSQL, bude rovnou to pole, které fetchAll vytvoří – a ne, že budu muset fetchAll (nebo cokoli podobného) použít dodatečně a výsledek uložit do další proměnné.
-->
A pokud jde o funkci PripravnaSQL, ta je připravená na jiné místo, kde
bude užitečnější.
Editoval Václav M. (3. 11. 2011 16:25)
před 8 lety
- Milo
- Nette Core | 1119
Také mi účel není jasný. Jak má vypadat to výsledné pole? Nestačilo by:
$columns = array(
'PuvodniNazevSouboru' => 'NazevSouboru_Stary',
'NazevSouboru_Novy' => 'NazevSouboru',
'PopisSouboru',
);
dibi::select($columns)
->from('Sprava_SeznamNahranychSouboru')
->execute()
->fetchAll();
před 8 lety
- Václav M.
- Člen | 34
Samozřejmě, že by takový postup stačil – ale chtěl jsem si vyzkoušet postup s tou funkcí PripravnaSQL.
Proč je to pole $columns naruby – proč jsou tabulkové názvy sloupců jako hodnoty, ne jako klíče? Bylo by to logičtější – vzhledem k struktuře polí podmínek.
NazevSouboru_Novy a NazevSouboru_Stary jsou původní, tabulkové názvy – kdežto NazevSouboru a PuvodniNazevSouboru jsou aliasy.
Editoval Václav M. (3. 11. 2011 16:42)
před 8 lety
- Milo
- Nette Core | 1119
Aha, s těma názvama jsem se překouknul.
Proč je syntaxe sloupec => alias
takto nevím. Asi protože
to je stejné pořadí jako v SQL sloupec AS alias
. Ale osobně
mám dibi upravené tak, aby to bylo alias => sloupec
a jako
sloupec mohu použít i pole.