Как я могу получить идентификатор текущего пользователя, чтобы использовать его в выражении dql?
Я знаю, что этот вопрос задавали многие, но никто не ответил даже: этот ответ. не является хорошим ответом на вопрос, как мне получить идентификатор текущего пользователя в выражении dql в репозитории. я вижу так много разговоров о том, что это не логика или это плохой выбор, так что какой вариант использовать идентификатор текущего пользователя в качестве параметра в выражении dql или QueryBuilder, и вот что я делаю, но не работает:
Мой контроллер:
public function GetGroupsByStudentAction()
{
$em=$this->getDoctrine()->getManager();
$modeles=$em->getRepository("AcmeMyBundle:GroupMatiere")
->findGroupByStudent();
return($this->render("AcmeMyBundle:GroupMatiere:list.html.twig",array("modeles"=>$modeles)));
}
public function ConnectedUserIdAction()
{ $user = $this->container->get('security.token_bag')->getToken()->getUser();
return $user->getId();
}
MyServices:
<service id="serviceGroupe" class="Acme\MyBundle\Controller\GroupMatiereController"/>
MyRepository:
public function findGroupByStudent()
{
// $currentid = i dont know how i call the methode from the service;
$query=$this->getEntityManager()
->createQuery("SELECT m from AcmeMyBundle:GroupMatiere m WHERE m.idGroupe=?1")
->setParameter(1, $currentid);
return $query->getResult();
}
Это будет работать, если я выберу для $currenttid=1; Но мне нужен подключенный идентификатор пользователя.
Спасибо за помощь и любые другие предложения изменить логику, я буду счастлив!
1 ответ
Определите ваш метод хранилища следующим образом:
public function findGroupByStudent($student)
{
$query=$this->getEntityManager()
->createQuery("SELECT m from AcmeMyBundle:GroupMatiere m WHERE m.idGroupe=?1")
->setParameter(1, $student->getId());
return $query->getResult();
}
А затем в контроллере передайте сущность Student, которая принадлежит текущему вошедшему в систему пользователю, например:
$modeles=$em->getRepository("AcmeMyBundle:GroupMatiere")
->findGroupByStudent($this->getUser()->getStudent());