Php 迭代理论似乎不可靠

Php 迭代理论似乎不可靠,php,doctrine-orm,Php,Doctrine Orm,正如我在中所发现的,使用条令将300k行作为实体加载不是一个好主意,至少会消耗1GB的内存 因为我需要一些按位操作,所以我想我应该对结果使用NativeQuery和iterate()。但是,在第一行之后,我的值始终为空。我的代码非常类似于: 然而,当我var_dump'ed$row时,我注意到每次代码在循环中运行时,索引实际上都会增加。这与文件相矛盾。我是做错了什么,还是发现了一个诚实的错误?我在这里找到了解决办法,并这样做了: $iterator = $this->getEntityMa

正如我在中所发现的,使用条令将300k行作为实体加载不是一个好主意,至少会消耗1GB的内存

因为我需要一些按位操作,所以我想我应该对结果使用
NativeQuery
iterate()
。但是,在第一行之后,我的值始终为空。我的代码非常类似于:

然而,当我
var_dump
'ed
$row
时,我注意到每次代码在循环中运行时,索引实际上都会增加。这与文件相矛盾。我是做错了什么,还是发现了一个诚实的错误?

我在这里找到了解决办法,并这样做了:

$iterator = $this->getEntityManager()->createNativeQuery($sql, $rsm)->iterate();
foreach ($iterator as $row) {
    yield call_user_func_array('array_merge', $row);
}

您是否尝试过使用该手册页面上倒数第二个示例中所示的基于while循环的方法进行迭代?我使用了这个,虽然使用了DQL查询,效果很好。是的,我刚刚测试了它,它给出了相同的“奇怪”结果。
$iterator = $this->getEntityManager()->createNativeQuery($sql, $rsm)->iterate();
foreach ($iterator as $row) {
    yield call_user_func_array('array_merge', $row);
}