迭代时的学说批处理查询

时间:2019-09-18 15:42:51

标签: symfony doctrine-orm doctrine symfony4

在symfony4中,我使用的是doctrine documentation

中所述的迭代解决方案

问题是我需要在foreach循环内执行查询,如果执行了,则迭代结束。

    //...
    $repo = this->_em->getRepository('App\Entity\EmailAddressStatus');
    // Gets 15k results
    $q = $this->_em->createQuery('select u from App\Entity\User u');
    $iterableResult = $q->iterate();

    foreach ($iterableResult as $row) {

        $emails = $row[0]->getEmails();
        foreach($emails as $email){
            // If i do this the iteration ends after first result
            $check = $repo->isEmailBlackListed($email);
            // Do something with $check and $email...
        }
        // detach from Doctrine, so that it can be Garbage-Collected immediately
        $this->_em->detach($row[0]);
    }

1 个答案:

答案 0 :(得分:0)

您应该尝试选择JOIN到EmailAddressStatus的用户,这样您就只能获得这样的有效用户:

$this->_em->createQuery('select u From App\Entity\User u JOIN App\Entity\EmailAddressStatus s WITH s.email = u.email AND s.status <> ?1')
        ->setParameter(1, 'not-allowed-status');