FetchAll indexované dle primarního klíče

Upozornění: Tohle vlákno je hodně staré a informace nemusí být platné pro současné Nette.
ZZromanZZ
Člen | 87
+
0
-

Nějak se nemůžu dopátrat v dokumentaci k PDO ať Nette\Database při fetchAll vrací datbázové záznamy indexované dle primárního klíče. A nechci po každém fetchAll() ještě znova předělávat indexy ve foreach cyklu. Víte jak na to? Díky

Editoval ZZromanZZ (31. 8. 2012 18:37)

Elijen
Člen | 171
+
0
-

Jestli jsem rozluštil dotaz správně, tak fetchPairs je to, co hledáš:

$db->table("table")->fetchPairs("id");
ZZromanZZ
Člen | 87
+
0
-

Pouzivam to na vlastni dotaz, ktery spoustim metodou:

<?php
$result = $database->query($statement)->fetchAll();
?>

fetchPairs potrebuje presne dva sloupce, ja potrebuju ty co chci vcetne primarniho klice, ale v poli indexovanem dle toho primarniho klice

doted pouzivam:

<?php
        // indexovat dle primarniho klice
        $ret = array();
        foreach($this->database->query($statement) as $row)
        {
            $ret[$row['id']] = $row;
        }

        return $ret;
?>
Elijen
Člen | 171
+
0
-

ZZromanZZ napsal(a):
fetchPairs potrebuje presne dva sloupce, ja potrebuju ty co chci vcetne primarniho klice, ale v poli indexovanem dle toho primarniho klice

To není pravda, podívej se do dokumentace :)

Ot@s
Backer | 476
+
0
-

Elijen napsal(a):

ZZromanZZ napsal(a):
fetchPairs potrebuje presne dva sloupce, ja potrebuju ty co chci vcetne primarniho klice, ale v poli indexovanem dle toho primarniho klice

To není pravda, podívej se do dokumentace :)

Pozor, ZZromanZZ má pravdu. Pokud má v $database Nette\Database\Connection, tak query vrací Nette\Database\Statement a fetchPairs se volá přímo via PDO (resp. PDOStatement, fetchAll). Vyzkoušej:

$result = $database->query($statement)->fetchAll(PDO::FETCH_CLASS, "id"); // id ... sloupec, ktery chces mit jako klic
ZZromanZZ
Člen | 87
+
0
-

reseni s FETCH_CLASS vubec nerozumim, vraci mi to: Class „id“ not found.

Pseudoreseni je tady
Ale tohle zase zrusi vsechny tridy, ktere jsou v takovemto poli uzitecne, jako Nette\DateTime atd..

Editoval ZZromanZZ (1. 9. 2012 16:19)

Ot@s
Backer | 476
+
0
-

ZZromanZZ napsal(a):

reseni s FETCH_CLASS vubec nerozumim, vraci mi to: Class „id“ not found.

Promiň, moje nepozornost – má být PDO::FETCH_COLUMN (Returns the indicated 0-indexed column). Správně tedy asi:

$result = $database->query($statement)->fetchAll(PDO::FETCH_COLUMN, 0); // misto 0 index sloupce, ktery ma byt jako index pole
ZZromanZZ
Člen | 87
+
0
-

Tohle vrati pouze klasicky indexovane pole od nuly, kde hodnota je hodnota toho sloupce na pozadavane pozici