2013-08-30 2 views
0

symfony2에서 사용자 정의 콘솔 명령을 만듭니다. 이 명령은 api를 호출하여 모든 사용자에게 맞는 작업을 찾습니다. 다음과 같은 오류가 발생합니다. 내 코드와 같은 것입니다 : symfony2의 일괄 처리

$em = $this->getContainer()->get('doctrine')->getEntityManager('default'); 
      $user = $em->getRepository('EnsUserBundle:User')->findAll(); 
       foreach ($user as $user) 
       { 
        ..... 
        $em->flush(); 
       } 
      } 
     } 

enter image description here

가 그럼 난 각 사용자에 대한 EntityManager를 취소합니다.

$em = $this->getContainer()->get('doctrine')->getEntityManager('default'); 
       $user = $em->getRepository('EnsUserBundle:User')->findAll(); 
        foreach ($user as $user) 
        { 
         ..... 
         $em->flush(); 
         $em->clear(); 
        } 
       } 
      } 

그것은 오류로 이어질 것입니다 : enter image description here 그런 다음 내가 일괄 처리 사용하려고 :

$em = $this->getContainer()->get('doctrine')->getEntityManager('default'); 
     $user = $em->getRepository('EnsUserBundle:User')->findAll(); 
     $iterableResult = $em->getRepository('EnsUserBundle:User')->findAll()->iterate(); 
     while (($row = $iterableResult->next()) !== false) 
     { 
      foreach ($user as $user) 
      { 
       ..... 
       $em->flush(); 
       $em->clear(); 
      } 
      $em->detach($row[0]); 
     } 
    } 

을하지만 enter image description here

그래서 오류로 연결, 당신은 할 좋은 충고? 감사합니다.

답변

1

당신은 시도 할 수 있습니다 : 그것은 (예를 XX 항목에 도달 할 때 개체를 플러시 php.ini의 memory_limit = 512M

  • :

    • 스크립트는 PHP 내에서 소비하는 최대 메모리를 증가 : 각 100 항목). 관리자가 플러시 할 때마다 관리자를 지울 수 있습니다.

  • +0

    저에게 감사드립니다. 하지만 두 번째 스크린 샷에서 보셨 듯. 내가 그것을 지우려고 할 때마다, 나는이 오류를 얻을 것이다. 왜 그런지 알아? –

    +0

    각 XX 시간마다 entityManager를 지우는 것이 좋습니다 (대량 처리). 왜 iterate() 함수를 사용하여 2 개의 루프에 포함시켜야합니까? –

    +0

    아마도 내가 필요 없다. 내가 이것을 보았 기 때문에 http://www.doctrine-project.org/blog/doctrine2-batch-processing.html#mass-object-processing. 그래서 나는 그것이 나를 도울 수 있다고 생각한다. –