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.