2014-09-17 5 views
2

내 응용 프로그램에 FOSUserBundle을 추가했으며 자체 엔티티 리포지토리를 사용하고 싶습니다.FOSUserBundle과 함께 사용자 지정 엔티티 리포지토리 사용

내 앱은 여러 항목으로 구성됩니다. 사용자, 작업, 파일 및 설명. FOSUserBundle을 추가 했으므로 사용자/작업/파일/주석이 모두 링크되도록 모든 것을 다시 맵핑 할 수 있었지만 프로파일 러에서 쿼리 수가 증가했다는 것을 알았습니다.

예를 들어, 사용자 프로필 페이지를 표시하기 위해 사용자 정보, 해당 사용자와 관련된 작업 및 해당 작업과 관련된 설명을 얻기 위해 db가 별도로 쿼리됩니다. 이전에는 하나의 쿼리가 내 리포지토리에서 쿼리를 사용하여 모든 정보를 얻었습니다.

showAction 컨트롤러가 이제 FOSUserBundle에 의해 제공되므로 저장소가 사용되지 않습니다.

내 자신의 저장소를 호출하기 위해 컨트롤러를 오버라이드하는 것을 제외하면 다른 방법이 있습니까?

편집 : 추가 엔티티 코드 :

use FOS\UserBundle\Model\User as BaseUser; 
use Doctrine\ORM\Mapping as ORM; 

/** 
* @ORM\Entity(repositoryClass="Test\TestBundle\Entity\Repository\TestUserRepository") 
* @ORM\Table(name="users") 
* @ORM\HasLifeCycleCallbacks 
*/ 
class TestUser extends BaseUser 
{ 
    // entity defintitions... 
} 

저장소 코드 (내 showAction 방법에 호출하는 데 사용하고 싶습니다에 여전히 지금 사용) :

use Doctrine\ORM\EntityRepository; 

class TestUserRepository extends EntityRepository 
{ 
    public function getUser($userId) 
    { 
     $qb = $this->createQueryBuilder('u') 
        ->select('u, j') 
        ->leftJoin('u.jobs', 'j') 
        ->leftJoin('u.files', 'f') 
        ->leftJoin('u.comments', 'c') 
        ->where('u.id = :userId') 
        //->addOrderBy('j.dateCreated', 'ASC') 
        ->setParameter('userId', $userId) 
        ; 

     return $qb->getQuery() 
        ->getResult(); 
    } 
} 

답변

2

예, 당신은 정의 할 수 있습니다 엔티티의 사용자 정의 저장소.

/** 
* @ORM\Entity(repositoryClass="Foo\UserBundle\Entity\Repository\UserRepository") 
* @ORM\HasLifecycleCallbacks 
* @ORM\Table(name="user") 
*/ 
class User extends BaseUser 
{ 
    ... 
} 
+0

고맙지 만 이미 저장소 클래스가 정의되어 있습니다 (내 질문에 코드 스 니펫 추가). showAction 컨트롤러가 호출 될 때 저장소 (예 :이 경우에는 getUser 함수)에서 함수를 사용할 수 있기를 원합니다. – tw332

관련 문제