如何在 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::class
的 select()
方法。
示例:
$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.
列。
我必须显示包含一些 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::class
的 select()
方法。
示例:
$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.
列。