zendframework fetchPairs在doctrine中的等效函数

时间:2011-08-22 13:42:35

标签: zend-framework doctrine doctrine-orm

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 个答案:

答案 0 :(得分:1)

您可以将\PDO::FETCH_KEY_PAIR模式与原则here一起使用。

示例:

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

答案 1 :(得分:0)

正确的方法是循环对象。

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

不太正确的方式:partial objects

$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
}

答案 2 :(得分:0)

在存储库类中,方法的主体

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

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

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

$ result将包含

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

另见using-index-by