2013-08-30 53 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

你可以嘗試:

  • 增加腳本中的PHP消耗的最大內存:的php.ini memory_limit = 512M

  • 刷新你的對象,當它到達XX項目(例如:每100個項目)。每次刷新時都可以清除管理員。

+0

謝謝你的回答。但正如你在第二個截圖中看到的那樣。每次我嘗試清除它,我都會得到這個錯誤。你知道爲什麼嗎? –

+0

我建議你清理entityManager每個XX時間(批量處理)。爲什麼你需要使用iterate()函數並將其引入2個循環? –

+0

也許我不需要。因爲我看到了這個http://www.doctrine-project.org/blog/doctrine2-batch-processing.html#mass-object-processing。所以我想也許這可以幫助我。 –