在学说2中,Eloquent chunk相当于什么?

时间:2014-03-11 08:35:22

标签: php symfony doctrine-orm

在Laravel中,您可以使用Eloquent来结果:

User::chunk(200, function($users)
{
    foreach ($users as $user)
    {
        //
    }
});

Doctrine2中的等价物(假设是Symfony2实体存储库)?

2 个答案:

答案 0 :(得分:0)

我不确定它是否具有确切的块功能,但是为了处理大量记录,您可能希望查看batch processing in doctrine

答案 1 :(得分:0)

您可以创建查询的可迭代结果。并逐个处理数据。

$batchSize = 20;
$i = 0;
$q = $em->createQuery('select u from MyProject\Model\User u');
$iterableResult = $q->iterate();
foreach ($iterableResult as $row) {
    $user = $row[0];
    $user->increaseCredit();
    $user->calculateNewBonuses();
    if (($i % $batchSize) === 0) {
        $em->flush(); // Executes all updates.
        $em->clear(); // Detaches all objects from Doctrine!
    }
    ++$i;
}
$em->flush();

在此处查看更多内容:http://docs.doctrine-project.org/projects/doctrine-orm/en/latest/reference/batch-processing.html