tiny ‘n’ smart
database layer

Odkazy: dibi | API reference

Oznámení

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

Jak získat asociativní pole??

před 10 lety

zool
Člen | 144

Ahoj, jak získám klasické asociativní pole?? N2co jak mi dává příkaz mysql_fetch_array
mám třeba dotaz

$result = dibi::query('select ID_FIR, NAZEV_FIRMY, IC from [FA_FIRMA] order by NAZEV_FIRMY');

Zkoušel jsem pak na výsledek dát metodu fetchPairs, ale to nepomohlo a vrátio mi to

Array ( [1] => Hodnota1 [2] => Hodnota2 )

A já bych chěl pole, které vypadá takto

Array ( 'ID_FIR' => 'Hodnota1' 'NAZEV_FIRMY' => 'Hodnota2', 'IC' => 'hodnota3')

před 10 lety

LastHunter
Člen | 1539

Tak to, co jsi uvedl, je defaultní chování metod fetch a fetchAll s tím, že se vrací DibiRow (resp. pole obsahující položky DibiRow) a ty názvy sloupců jsou properties toho objektu.

$result = dibi::query('select ID_FIR, NAZEV_FIRMY, IC from [FA_FIRMA] order by NAZEV_FIRMY')->fetch();

$result->ID_FIR;
$result->NAZEV_FIRMY;
$result->IC;

Pokud to chceš vyloženě v poli, zkusil bych ten $result přetypovat na array ((array) $result).

Pokud chceš vrátit asociativní pole (pro více výsledků) podle nějakého sloupce, tak k tomu slouží fetchAssoc.

$result = dibi::query('select ID_FIR, NAZEV_FIRMY, IC from [FA_FIRMA] order by NAZEV_FIRMY')->fetchAssoc('ID_FIR');

foreach($result as $key=>$value) {
    //$key je ID_FIR
    $value->ID_FIR;
    $value->NAZEV_FIRMY;
    $value->IC;
}

před 10 lety

zool
Člen | 144

Já jsem se právě chtěl tomu vyhnout to vypisovat, vitím že budu asi muset použít starou dobrou funckci mysql_fetch_array bo ta mi to vrátí, tak jak potřebuju a nemusím to řešit;-)

před 10 lety

Tomik
Nette Evangelist | 489

zool napsal(a):

Já jsem se právě chtěl tomu vyhnout to vypisovat, (…)

Vždyť ani v dibi není nutní to vypisovat.

před 10 lety

zool
Člen | 144

A jo, super díky pomohlo to fetch

před 10 lety

zool
Člen | 144

No ale stejně mi to přijde trochu složité, bo chci klasické pole z každého záznamu musím udělat toto:

$result = dibi::query('select ID_FIR, NAZEV_FIRMY, IC from [FA_FIRMA] order by NAZEV_FIRMY')->fetchAssoc('ID_FIR');

        foreach($result as $key=>$value) {

        $pole = (array) $value;

        print_r($pole);
    }

A tím dostanu klasické pole, není na to přímo nějaká metoda, která mi přímo vrátí pole, jako by pole přímo řádků?
Omlouvám se s dibi jsem se poprve setkal včera.

před 10 lety

LastHunter
Člen | 1539

A k čemu potřebuješ pole?

před 10 lety

zool
Člen | 144

Právě že to aplikuji na šablonu a ta mi podporuje pouze pole nikoliv objekt :-(

Editoval zool (28. 10. 2009 21:43)

před 10 lety

LastHunter
Člen | 1539

Aha.

Trochu jsem pohledal na tomto fóru a podle tohoto threadu umí dibi pracovat s výsledky i jako s polem :) Zkoušels to vůbec? :)

před 10 lety

zool
Člen | 144

Nee četl jsem si právě jen dokumentaci k Dibi a přišla mi dost strohá, tak já na to mrknu a dám vedět výsledek ;-).

Jinak co bych mohl na dibi pochválit, je že super vymysleli, jak zadávat a editovat data v databázi. I když četl jsem tady i články, že někdy při vnořených dotazech je docela pomalé, a nedočetl jsem se jestli to opravili či nikoli. To by mě právě taky zajímalo.

Editoval zool (29. 10. 2009 15:45)

před 10 lety

zool
Člen | 144

Přečetl jsem, zhodnotil jsem a mám z toho toto $res->fetchAssoc(‚ID_FIR,=‘); , je to super vrátí mi to přesně to co potřebuju. Taky jsem tam četl, že původně dibi vracelo pole a až v této nové verti vrací objekt, který se sice tváří jako pole, avšak není pole :-).