我有一个包含两个其他实体(角色和客户)的用户实体,我想在用户要求登录时加载它们。
在我的UserRepository中我有这个方法:
<?php
public function loadUserByUsername($username)
{
$q = $this
->createQueryBuilder('u')
->select('u, g, c')
->leftJoin('u.role', 'g')
->leftJoin('u.customer', 'c')
->where('u.username = :username')
->setParameter('username', $username)
->getQuery();
try {
$user = $q->getSingleResult();
} catch (NoResultException $e) {
$message = sprintf('Unable to find an unique user MyProjectUserBundle:User object identified by "%s".', $username);
throw new UsernameNotFoundException($message, null, 0, $e);
}
return $user;
}
但是,在每个页面中,当我第一次接受客户或角色时,它会发出请求:
SELECT t0.id AS id1,t0.name AS [...] FROM users t0 WHERE t0.id =?
SELECT t0.id AS id1,t0.name AS [...] FROM groups t0 WHERE t0.id =?
SELECT t0.id AS id1,t0.name AS [...] FROM customers t0 WHERE t0.id =?
我希望Doctrine在提交登录表单时一劳永逸地加载它们。
以下是我的用户提供商代码:
providers:
users:
entity: { class: MyProjectUserBundle:User }
感谢您的帮助。