Использование собственного хранилища объектов с FOSUserBundle

Я добавил FOSUserBundle в свое приложение и хотел бы использовать свой собственный репозиторий сущностей.

Мое приложение состоит из нескольких объектов; Пользователи, вакансии, файлы и комментарии. С тех пор как я добавил FOSUserBundle, я смог переназначить все, поэтому пользователи / jobs / files / comments все ссылаются так, как должны, но я заметил в профилировщике, что количество запросов увеличилось.

Например, чтобы показать страницу профиля пользователя, к базе данных теперь обращаются по отдельности, чтобы получить информацию о пользователе, задания, которые относятся к этому пользователю, и комментарии, относящиеся к этим заданиям. Ранее один запрос получил бы всю эту информацию, используя запрос в моем хранилище.

Поскольку контроллер 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
{
...
}
2

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]