Doctrine result jako options pro formulář

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

Ahoj,

je nějaký pěkný způsob, jak vytvořit options z doctrine výsledku?

Příklad:
Touto metodou v modelu vytahuji všechny položky z db:

    public function findALL() {
        return $this->em->createQueryBuilder()->select('c')->from(Cookie::getClassName(), 'c');
    }

Poté musím data poskládat do formátu options ve formuláři:

        $cookiesList = [];
        foreach($this->repository['cookies']->findAll() as $cookie)
        {
            $cookiesList[$cookie[0]->id] = $cookie[0]->description;
        }

        $form->addSelect('cookieId', 'Cookie', $cookiesList)
            ->setPrompt('-')
            ->setOption('description', 'Při zobrazení stránky uloží cookie se zvolenou hodnotou')
            ->setDefaultValue($this->entity->cookieId);

Dá se to zapsat hezčeji?

díky

Editoval Landsman (9. 9. 2016 17:46)

Martk
Člen | 661
+
+1
-

Používáš-li výchozí repozitář od Kdyby/Doctrine, tak takhle:

public function getPairs() {
    return $this->findPairs([], 'description', 'id');
}
$form->addSelect('cookieId', 'Cookie', $this->repository['cookies']->getPairs())
    ->setPrompt('-')
    ->setOption('description', 'Při zobrazení stránky uloží cookie se zvolenou hodnotou')
    ->setDefaultValue($this->entity->cookieId);
Landsman
Člen | 152
+
0
-

Antik napsal(a):

Používáš-li výchozí repozitář od Kdyby/Doctrine, tak takhle:

public function getPairs() {
    return $this->findPairs([], 'description', 'id');
}
$form->addSelect('cookieId', 'Cookie', $this->repository['cookies']->getPairs())
    ->setPrompt('-')
    ->setOption('description', 'Při zobrazení stránky uloží cookie se zvolenou hodnotou')
    ->setDefaultValue($this->entity->cookieId);

To vypadá skvěle! Děkuji!

iguana007
Člen | 970
+
0
-

Landsman napsal(a):

Antik napsal(a):

> public function getPairs() {
>     return $this->findPairs([], 'description', 'id');
> }

Jen by jsem upřesnil odpověď výše (teď jsem řešil totéž a narazil na toto vlákno). Poslední parametr by měl být polem, jinak se řazení neaplikuje. Správně by to tedy mělo být:

public function getPairs() {
    return $this->findPairs([], 'description', ['id']);
}
Landsman
Člen | 152
+
0
-

@iguana007 Zajímavé, mě to fungovalo i jako string.