tiny ‘n’ smart
database layer

Odkazy: dibi | API reference

Oznámení

Omlouváme se, provoz fóra byl ukončen

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.