2013-10-29 5 views
1

게시물에 대한 관계형 데이터베이스가 있습니다.Symfony2 Doctrine2 초과 메모리 한계, 1073741824 바이트의 사용 가능한 메모리 크기

포스트 표 < - OneToMany

포스트 고양이 표 < - ManyToOne

분류 표 < - OneToMany

내가 사용하는 엔티티에서 테이블을 조인하는 교리 @ORM를 사용하는 경우 주석. 나는 흰색 화면을 얻을하고 오류 로그는 오류 보여 내가 64M에서 1024M에, 메모리 제한을 여러 번 올렸습니다

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} 

합니다.

누구든지이 문제가 있습니까? 나는 파일을 실행> 메모리 기가 좋다고 생각합니다.

쿼리 작성기를 사용하여 쿼리를 작성하면 예상 한 결과가 나타납니다. 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

이것은 no-no이며 문제의 원인입니다. (print_r ($ posts)) print_r은 엔티티를 잘 이해하지 못하고 무한 루프를 일으 킵니다. – Cerad

답변

3

그래서 @Cerad 덕분에 문제가 해결되었습니다.

문제는 내가 ether인데 PHP에서 print_r()을 수행했거나 나뭇 가지 템플릿에서 {{dump()}}했습니다. 이 함수는 엔티티를 좋아하거나 큰 배열/객체를 표시하지 않습니다.

이제 모든 데이터를 덤프하지 않고 원하는 값을 원하는 부분 만 호출합니다. 그리고 그것은 잘 작동합니다!.

편집 :

이 작품에 대한 덤핑 데이터는 다음 메모리 제한으로 실행할 수 만개의 레코드를 처리 할 일이 있다면

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

+0

내부 메서드를 사용하여 Doctrine2 개체를 멋지게 덤프 할 수 있습니다. https://coderwall.com/p/qpdclw – Damien

+0

와우,이 항목을 찾기 전에 2 시간을 소비하고, 의사 결정을 사용하는 컨트롤러 만 실패 했으므로 항목을 변경했습니다. . 사실 var_dump를 사용하고 엔티티 간의 매핑이있을 때 요청을 죽였고 var_export도 문제가없는 것 같습니다. – tomhre