我已将FOSUserBundle添加到我的应用程序中,并希望使用我自己的实体存储库。
我的应用程序由几个实体组成;用户、作业、文件和注释。自从我添加了FOSUserBundle以来,我已经能够重新映射所有内容,因此用户/作业/文件/注释都可以按应有的方式进行链接,但我在探查器中注意到查询数量有所增加。
例如,为了显示用户配置文件页面,现在单独查询数据库以获取用户信息、与该用户相关的作业以及与这些作业相关的注释。以前,一个查询会使用我的存储库中的查询获得所有这些信息。
由于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();
}
}
是的,您可以在实体中定义自定义存储库。
/**
* @ORM'Entity(repositoryClass="Foo'UserBundle'Entity'Repository'UserRepository")
* @ORM'HasLifecycleCallbacks
* @ORM'Table(name="user")
*/
class User extends BaseUser
{
...
}