2012-12-02 2 views
0
My\SampleBundle\Entity\Subject: 

    // ... 

    manyToOne: 
     author: 
      targetEntity: My\UserBundle\Entity\User 
      joinColumn: 
       name: owner 
       referencedColumnName: id 

취득 할 수있는 주제와 관련된 사용자의 데이터를 좀하고 싶습니다.Symfony2/Doctrine2 : 나는 사용자 정보

$query = $this->getEntityManager() 
       ->createQuery(' 
        SELECT s, a 
        FROM MySampleBundle:Subject s 
        LEFT JOIN s.author a 
        WHERE s.author = :author 
        GROUP BY s.title' 
      ) 
       ->setParameter("author", $author); 

반대로 사용자 정보로 어떻게해야합니까?

예를 들어, 사용자 목록 페이지의 쿼리.

$query = $this->getEntityManager() 
       ->createQuery(' 
        SELECT u 
        FROM MyUserBundle:User u 
        GROUP BY u.username' 
      ); 

현재 관련 주제에 대한 데이터를 얻고 싶습니다.

나는 FOSUserBundle을 사용합니다.
My \ UserBundle \ Entity를 수정해야하는 문제입니까?
아니면 orm 설정 단계에서 잘못 되었습니까?

+0

아래 답변으로 솔루션을 추가하십시오의 예. 변경된 내용과 해결 방법을 곧 설명하십시오. 그러면 완벽한 Q & A 항목이됩니다. 어떤 문제가 생기면 알려줘. 그리고 네, 자신의 질문에 대답 할 수 있습니다 (그리고 대답을 수락하십시오). – hakre

+0

확인을 누르면 텍스트에 추가됩니다. 그러나 완벽한 해결책이 아니 었습니다. 쉬운 데이터가 수집되었습니다. 그러나 조인 테이블이 증가 할 때 응답을 중지하며 항상로드되는 상태가됩니다. 나는 데이터가 반드시 너무 무겁지 않다고 생각한다. 문제는 아직 이해가되지 않습니다. –

+0

답변에 100 % 만족하지 않더라도 질문을 편집하지 말고 대답 * 아래에 추가하십시오 (새 빈 상자). 당신의 질문에 대답하고 약간의 시간이 지났 으면, 당신은 당신의 질문을 "해결 된"것으로 표시 할 대답으로 받아 들일 수 있습니다. 적어도 다른 사용자의 경우 질문과 대답이 무엇인지 명확하게 알 수 있습니다. 이것은 심지어 다른 대답을 남길 수도있는 다른 사람들을 끌어 들일 수도 있습니다. – hakre

답변

0

내가 수정 한 절차.

STEP : 1 내 \ UserBundle \ 엔티티 \ 사용자에 추가

/** 
* @ORM\OneToMany(targetEntity="My\SampleBundle\Entity\Subject", mappedBy="author") 
*/ 
private $subjects; 

/** 
* Get subjects 
* 
* @return Doctrine\Common\Collections\Collection 
*/ 
public function getSubjects() 
{ 
    return $this->subjects; 
} 

단계 : 2 추가 'inversedBy'

My\SampleBundle\Entity\Subject: 
    type: entity 

    // ... 

    manyToOne: 
     author: 
      targetEntity: My\UserBundle\Entity\User 
      inversedBy: subjects 
      joinColumn: 
       name: owner 
       referencedColumnName: id 

STEP : 3 쿼리

$query = $this->getEntityManager() 
       ->createQuery(' 
        SELECT u, s 
        FROM MyUserBundle:User u 
        LEFT JOIN u.subjects s 
        ORDER BY u.username' 
      ); 

쉬운 데이터 획득되었습니다. 하지만 완벽한 솔루션이 아니 었습니다.

조인 테이블이 증가하면 응답이 중지되고 항상로드되는 상태가됩니다.
데이터가 너무 무겁지 않다고 생각합니다.
문제는 아직 이해되지 않았습니다.

또 다른 문제

$query = $this->getEntityManager() 
       ->createQuery(' 
        SELECT u, s, a, c, i 
        FROM MyUserBundle:User u 
        LEFT JOIN u.subjects s 
        LEFT JOIN u.articles a 
        LEFT JOIN u.comments c 
        LEFT JOIN u.images i 
        // etc... 
        // It will be in the state of loading all the time 
        // when join table increases. 
        ORDER BY u.username' 
      ); 
+0

그들은 내 상상력이었습니다. 페이지 기능도 관련되어 있으며 너무 많은 데이터가 있었기 때문이라고 생각합니다. 근본적인 데이터 수집은 이제 OK라고 생각합니다. –