我正在使用FOSUserundle,我使用此代码来查找用户:
$userManager = $this->get('fos_user.user_manager');
$user = $userManager->findUserBy(array(
'username' => 'name surname',
));
它的关键是与用户名完全匹配,有没有办法使用'like子句'?
感谢
我的解决方案
use Doctrine\ORM\EntityRepository;
class UserRepository extends EntityRepository
{
public function findUserByUsernameLike($username)
{
return $this->getEntityManager()
->createQuery(
'SELECT u.id, u.username FROM MyUserBundle:User u where u.username LIKE :username ORDER BY u.username ASC'
)
->setParameter('username', '%'.$username.'%')
->getResult();
}
}
答案 0 :(得分:0)
UserManager::findUserBy()
方法只是Doctrine EntityManager::findOneBy()
的代理,它不支持LIKE
表达式。您必须创建一个自定义DQL查询,如下所示:
SELECT u FROM MyBundle:User u WHERE u.username LIKE :username
您可以创建自己的UserManager
课程,该课程将扩展由FOSUserBundle提供的UserManager
:
use FOS\UserBundle\Doctrine\UserManager as BaseManager;
class UserManager extends BaseManager
{
public function findUserByUsernameLike($username)
{
return $this->repository->createQueryBuilder('u')
->where('u.username LIKE :username')
->setParameter('username', '%' . $username . '%')
->getQuery()
->getSingleResult();
}
}
将其注册为源自fos_user.user_manager
的服务:
<service id="my.user_manager" class="...\UserManager" parent="fos_user.user_manager" />
告诉FOSUserBundle将此类用作用户管理器:
# config.yaml
fos_user:
services:
user_manager: my.user_manager