【问题标题】:Doctrine iterate seems flaky教义迭代似乎不稳定
【发布时间】:2012-06-02 02:50:07
【问题描述】:

正如我在another question 中发现的那样,使用 Doctrine 将 300k 行作为实体加载不是一个好主意,并且会消耗至少 1 GB 的内存。

因为无论如何我都需要一些按位运算,所以我想我会在结果上使用NativeQueryiterate()。但是,在第一行之后,我的值始终为空。我的代码与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


【解决方案1】:

我在这里找到了解决方案 Merge all sub arrays into one 并这样做了:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-12-14
    • 1970-01-01
    • 1970-01-01
    • 2022-11-28
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多