【问题标题】:Using custom entity repository with FOSUserBundle将自定义实体存储库与 FOSUserBundle 一起使用
【发布时间】:2014-11-12 00:16:03
【问题描述】:

我已将 FOSUserBundle 添加到我的应用程序中,并希望使用我自己的实体存储库。

我的应用由多个实体组成;用户、工作、文件和评论。由于我添加了 FOSUserBundle,我已经能够重新映射所有内容,以便用户/作业/文件/cmets 都按照应有的方式链接,但我在分析器中注意到查询数量有所增加。

例如 - 为了显示用户个人资料页面,现在单独查询 db 以获取用户信息、与该用户相关的作业以及与这些作业相关的 cmets。以前,一个查询会使用我的存储库中的查询获得所有这些信息。

由于 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();
    }
}

【问题讨论】:

    标签: php symfony repository entity fosuserbundle


    【解决方案1】:

    是的,您可以在实体中定义自定义存储库。

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

    【讨论】:

    • 谢谢,但我已经定义了存储库类(在我的问题中添加了代码 sn-ps)。当调用 showAction 控制器时,我希望能够使用存储库中的函数(例如 - 在本例中为 getUser 函数)。
    猜你喜欢
    • 2014-05-14
    • 2021-10-02
    • 1970-01-01
    • 2013-06-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多