Odkazy: dibi | API reference

Forum: [česky] [english]

dibi fórum

tiny ‘n’ smart
database layer

Nejste přihlášen(a)

#1 před 6 měsíci

Václav M.
Člen
Registrovaný: 19. 10. 2011
Příspěvky: 33

Fluent a fetchAll() – získání srozumitelného výsledku

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();

Chybami se člověk učí – ale někteří lidé jsou nepoučitelní.

 

#2 před 6 měsíci

HosipLan
dibi guru
Registrovaný: 1. 6. 2009
Příspěvky: 2630

Re: Fluent a fetchAll() – získání srozumitelného výsledku

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 )

Neptej se, jestli se můžeš ptát | Blog | Twitter | GitHubCMS Kdyby

Nette Jabber Room – nette@conf.netlab.cz , všichni jste vítáni

 

#3 před 6 měsíci

Václav M.
Člen
Registrovaný: 19. 10. 2011
Příspěvky: 33

Re: Fluent a fetchAll() – získání srozumitelného výsledku

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)


Chybami se člověk učí – ale někteří lidé jsou nepoučitelní.

 

#4 před 6 měsíci

Milo
dibi guru
Registrovaný: 4. 5. 2010
Příspěvky: 298

Re: Fluent a fetchAll() – získání srozumitelného výsledku

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();

 

#5 před 6 měsíci

Václav M.
Člen
Registrovaný: 19. 10. 2011
Příspěvky: 33

Re: Fluent a fetchAll() – získání srozumitelného výsledku

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)


Chybami se člověk učí – ale někteří lidé jsou nepoučitelní.

 

#6 před 6 měsíci

Milo
dibi guru
Registrovaný: 4. 5. 2010
Příspěvky: 298

Re: Fluent a fetchAll() – získání srozumitelného výsledku

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.

 

Zápatí