【发布时间】:2012-06-02 02:50:07
【问题描述】:
正如我在another question 中发现的那样,使用 Doctrine 将 300k 行作为实体加载不是一个好主意,并且会消耗至少 1 GB 的内存。
因为无论如何我都需要一些按位运算,所以我想我会在结果上使用NativeQuery 和iterate()。但是,在第一行之后,我的值始终为空。我的代码与the documentation高度相似:
$sql = "SELECT `pushToken` FROM `Devices`";
$rsm = new Doctrine\ORM\Query\ResultSetMappingBuilder(self::$entityManager);
$rsm->addScalarResult("pushToken", "pt");
$query = self::$entityManager->createNativeQuery($sql, $rsm);
$iterableDevices = $query->iterate();
foreach ($iterableDevices as $row)
{
$message->addRecipient($row[0]["pt"]);
}
然而,当我var_dump'ed $row 时,我注意到每次代码运行循环时索引实际上都会增加。这与文档相矛盾。我做错了什么,还是我发现了一个诚实的错误?
【问题讨论】:
-
您是否尝试过使用该手册页上倒数第二个示例中显示的基于 while 循环的方法进行迭代?我使用了那个,尽管使用 DQL 查询,效果很好。
-
是的,我刚刚对其进行了测试,它给出了相同的“奇怪”结果。
标签: php doctrine-orm