如何获取当前用户的 ID 以在 dql 语句中使用它?

How can i get current user's id to use it in a dql statement?

我知道很多人问过这个问题,但甚至没有人回答: This reponse。 对于如何将当前用户的 ID 放入存储库中的 dql 语句,这不是一个很好的回应。 我看到很多人在谈论它不符合逻辑或者这是一个糟糕的选择,那么将当前用户的 id 像参数一样用于 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();

}

我的服务:

<service id="serviceGroupe" class="Acme\MyBundle\Controller\GroupMatiereController"/>

我的存储库:

    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();

}

如果我选择 $currentid=1 就可以了;但我需要连接的用户 ID。

Thanks For Help and any other suggestion to change the logic i will be happy !

像这样定义您的存储库方法:

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());