Doctrine findBy* 方法和获取数组

3
什么是使用Doctrine的findBy方法并返回数组而不是对象的最干净的方法?
Doctrine::getTable('Table')->findOneById(x);

这个方法能够返回一个Doctrine对象。

虽然我仍然希望能使用find方法,但我知道无法添加。

->fetchArray()

最后。

还有其他人遇到过这个问题吗?

4个回答

20

在使用魔法查找器时,您可以指定水合模式,如下所示:

Doctrine_Core::getTable('Table')->findOneById($x, Doctrine_Core::HYDRATE_ARRAY);

3
尝试使用 toArray
Doctrine::getTable('Table')->findOneById(x)->toArray();

15
如果您这样做,首先会获取一个对象然后将其转换为数组,这在内存方面不是很高效。 - DuoSRX

3

Haim Evgi和DuoSRX的答案是正确的,但在使用Symfony时,我更喜欢稍微不同的版本:

假设您的模型名称是Person,则可以使用以下代码:

PersonTable::getInstance()->findOneById(x)->toArray();

或者

PersonTable::getInstance()->findOneById($x, Doctrine_Core :: HYDRATE_ARRAY);


那么,有什么区别吗? - NBPalomino
@NBPalomino:第一个函数检索完整对象并将其转换为数组,而第二个函数则直接将其作为数组进行检索(使用的内存更少,速度更快)。我建议在需要检索信息而不更新数据库时使用数组水合。 - okdewit

1
$adCampaign = $em->createQuery('select c from \Model\Campaign c where c.client = ?1')
->setParameter(1, $clientId)
->getArrayResult();

em是entityManager - 你可以通过getArrayResult方法将结果以数组形式返回


我认为你会发现你的答案与Symfony 2.x(Doctrine 2)有关,它支持命名空间和实体管理器服务,而原始问题标记为Symfony 1。 - nealio82

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接