2013-10-29 108 views
1

我有一個關係數據庫的職位。Symfony2 Doctrine2超出內存限制,允許的內存大小1073741824字節用盡

後表< - 一對多

郵政貓表< - 多對一

分類表< - 一對多

如果我使用學說@ORM使用聯接表,在實體註解。我得到一個白色的屏幕,並在錯誤日誌顯示錯誤:

emergency.EMERGENCY: Allowed memory size of 1073741824 bytes exhausted (tried to allocate 1052508160 bytes) {"type":1,"file":"/[PATH TO SYMFONY]/vendor/twig/twig/lib/Twig/Extension/Debug.php","line":66} 

我都增加了內存限制了幾次,從64M到1024M。

是否有其他人發現此問題?我認爲執行一個內存Gig的文件並不好。

如果我使用查詢生成器編寫查詢,我會得到我期望的結果。我認爲如果我可以讓Doctrine關係映射工作,這會更好。有沒有人對此有看法?

我想就此事提供一些建議。

謝謝提前。

------------編輯迴應評論------------------------ ---------------

感謝您的評論@Cerad。數據庫中只有大約10行。另外我在app_dev.php。 這裏有一些摘錄形成我的文件。

交表

class Post 
{ 
    //...^table collumns 

    /** 
    * @ORM\OneToMany(targetEntity="PostCats", mappedBy="Post") 
    */ 
    protected $PostCats; 

    public function __construct() 
    { 
     $this->PostCats = new ArrayCollection(); 
    } 

} 

貓後加入表。

class PostCats 
{ 
    //...^table collumns 

    /** 
    * @ORM\ManyToOne(targetEntity="Post", inversedBy="PostCats") 
    * @ORM\JoinColumn(name="postid", referencedColumnName="id") 
    */ 
    protected $Post; 

} 

控制器

$posts = $this->getDoctrine() 
    ->getRepository('comPostBundle:Post') 
    ->find(7); 
if (!$posts) { 
    throw $this->createNotFoundException(
     'No product found for id '.$posts 
    ); 
} 
return new Response(print_r($posts)) 

結果....白屏... 我也試圖返回倒入一個模板樹枝的結果。

您認爲可以跳過Doctrine關係映射並只在實體存儲庫中寫入連接嗎?

+0

如果你碰巧被處理的記錄幾萬,那麼你可能會遇到內存限制。您的控制器中的某處可能存在無限循環。考慮發佈您的查詢代碼和後續處理。更好的是,發出命令並嘗試將問題隔離到幾行代碼中。並在開發中使用開發模式。 – Cerad

+0

我已經編輯了我的文章並更新了您的評論,謝謝。 – Joe

+2

這是一個禁忌和你的問題的原因:(print_r($ posts))print_r不能很好地理解實體,它會導致無限循環。 – Cerad

回答

3

所以這個問題已經通過@Cerad解決了。

問題是,我在ether中做了一個print_r()在PHP中,或在樹枝模板中的{{dump()}}。這些函數不喜歡實體或顯示大型數組/對象。

現在我只是調用我想要的返回值的哪些部分,而不是傾銷整個數據。它工作正常!

編輯:

這適用於傾銷數據

\Doctrine\Common\Util\Debug::dump($object);

+0

您可以使用內部方法很好地轉儲Doctrine2對象:https://coderwall.com/p/qpdclw – Damien

+0

哇,我花了2小時才找到這個條目,改變了實體,因爲很顯然只有使用原則的控制器失敗。實際上,我使用的是var_dump,並且在實體之間存在一些映射的時候殺死了請求,對於var_export來說似乎也很好 – tomhre

相關問題