如何在 symfony 4 api 中获取仅显示所选数据的 sql 请求

how to get sql request in symfony 4 api that show only the selected data

我必须显示包含一些 professionnels.the 专业和子类别之间的对象关系映射的子类别列表:ManytoMany。但结果我得到了子类别列表,其中包含所有相关专业的对象。 我想显示仅包含选定客户的子类别列表。 请问如何操作?

/* @QueryParam(name="professionnels", default="", description="")
 * @Rest\View(statusCode=Response::HTTP_OK, serializerGroups={"subCategory", "Default"})
 * @Rest\Get("/subCategory/all")
 */
 public function getAllSubCategoriesAction(Request $request, ParamFetcher $paramFetcher)
 {   
   $em = $this->getDoctrine()->getManager();
   $professionnels  = $paramFetcher->get('professionnels');
   $where = false;
   if (!empty($professionnels)){
     if (!$where) {
       $queryBuilder->leftJoin('a.professionnels', 'c')    
                    ->where('c.id IN (:professionnels)')
                    ->setParameter('professionnels', $professionnels);
     } else {
       $queryBuilder->leftJoin('a.professionnels', 'c')    
                    ->andWhere('c.id IN (:professionnels)')
                    ->setParameter('professionnels', $professionnels);
     }

        $params['professionnels'] = $professionnels;
        $where = true;
    }
    if(!empty($params)){
      $queryBuilder->setParameters($params)
                ->orderBy('a.name');
    } else {
      $queryBuilder->orderBy('a.name');
    }

    return $queryBuilder->getQuery()->getResult();
}

您需要明确使用 QueryBuilder::classselect() 方法。

示例:

$queryBuilder->select('c.id', 'c.name') // Only these columns will be selected
    ->leftJoin('a.professionnels', 'c')
    ->where('c.id IN (:professionnels)')
    ->setParameter('professionnels', $professionnels);

https://www.doctrine-project.org/projects/doctrine-orm/en/2.6/reference/query-builder.html

您可以像这样使用 select() select('a', 'c.id', 'c.name') 这将 select 所有别名为 a 并且只指定 u. 列。