Как я могу получить идентификатор текущего пользователя, чтобы использовать его в выражении 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());
Другие вопросы по тегам