Эквивалентная функция zendframework fetchPairs в учении - PullRequest
2 голосов
/ 22 августа 2011

Адаптер таблицы Zend db предоставляет функцию fetchPairs, которая возвращает пары массивов (id => idvalue, ...),

$db = Zend_Db_Table::getDefaultAdapter();
$select = $db->select()->from('users', array('id', 'username'));
$roleOptions = $db->fetchPairs($select);

который может быть загружен в элемент формы Zend

$this->addElement('select', 'user', array(
            'label'      => 'Select user:',
            'required'   => true,
            'multiOptions' => $roleOptions
        ));

Какая эквивалентная функция доступна в Doctrine?

Я знаю, что мы можем сделать это, просматривая набор записей :)

Но я хочу сделать это правильно, используя доктрину.

Ответы [ 3 ]

1 голос
/ 12 января 2016

Вы можете использовать режим \PDO::FETCH_KEY_PAIR с доктриной, как объяснено здесь .

Пример:

$statement = $connection->query('SELECT id, username FROM users'); $pairs = $statement->fetchAll(\PDO::FETCH_KEY_PAIR);

0 голосов
/ 23 сентября 2013

В классе репозитория, тело метода

$qb = $this->_em->createQueryBuilder();

$qb->select('t.id, t.param1, t.param2')
        ->from($this->_entityName, 't INDEX BY t.id');

$res =  $qb->getQuery()->getResult();

И результат $ будет содержать

array(
    1 => array(
        id = 1,
        param1= val2,
        param2=val2
    ),
    ...,
    234 => array(
        id = 234,
        param1= val234,
        param2=val234
    )
);

см. Также using-index-by

0 голосов
/ 22 августа 2011

Правильный путь - это циклический просмотр объектов.

$q = $em->createQuery("select u from MyApp\Domain\User u");
foreach ($q->getResult() as $user){
    //process it here
}

Не очень правильный путь: частичные объекты

$q = $em->createQuery("select partial u.{id,name} from MyApp\Domain\User u");
foreach ($q->getResult() as $user){
    //process it here the same way as above
}
...