Doctrine2 – návrat dat stejně jako ->fetch(id, name) z Nette\Database

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

Ahoj,

potřebuji vložit data do selectboxu ve formátu Array(primaryKey ⇒ name). Pro práci s databází využívám Doctrine2. Bohužel, již to hledám déle a zdá se, že nic podobného ->fetch(id, name) z Nette\Database neumí.

Má se tedy dopsat třída pro naformátování pole nebo Doctrine2 něčím takovým disponuje?

enumag
Člen | 2118
+
0
-

Neměl bys tohle řešit na Doctrine 2 fóru?

Jinak v NDB tohlr neumí fetch, ale fetchPairs.

Tomáš Jablonický
Člen | 115
+
0
-

Asi to není správné řešení, ale využil jsem fetchAll() a výsledné pole naformátoval přes foreach:

<?php
...

    public function getRoles()
    {
        $rows = $this->connection->fetchAll('SELECT * FROM role');
        $roles = array();
        foreach ($rows as $key => $value) {
            $roles[$value['id']] = $value['name'];
        }
        return $roles;
    }
...
?>
Michal Vyšinský
Člen | 608
+
0
-

Já bych toto řešil vlastním EntityRepository, kde bych si udělal metodu fetchPairs kde by byl ten foreach co máš v tom getRoles(). U toho budeš mít výhodu, že pak voláš jen ..->fetchPairs(„id“,„name“) a nebudeš to muset psát pokaždé znovu.

mkoubik
Člen | 728
+
0
-

Já jsem si na tohle naimplementoval vlastní collection, která dostane v konstruktoru tu původní a přidává metodu ->toList(). Entity pak implementují rozhraní s metodami pro získání klíče a hodnoty do toho pole.

Tomáš Jablonický
Člen | 115
+
0
-

@mkoubik … to zní rozumněji než vlasní repository :-)

@CherryBoss … to je ale řešení nad jednou Entity (možná se mýlím) :-)