내 응용 프로그램에 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();
}
}
고맙지 만 이미 저장소 클래스가 정의되어 있습니다 (내 질문에 코드 스 니펫 추가). showAction 컨트롤러가 호출 될 때 저장소 (예 :이 경우에는 getUser 함수)에서 함수를 사용할 수 있기를 원합니다. – tw332