You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在API Platform中获取Product实体所有唯一品牌与产品类型列表

实现方案

步骤1:为Product实体添加自定义集合操作

在你的Product实体的@ApiResource注解的collectionOperations配置中新增自定义端点:

/**
 * @ApiResource(
 *     collectionOperations={
 *         "get", // 保留原有列表接口
 *         "get_filters"={
 *             "method"="GET",
 *             "path"="/products/filters",
 *             "controller"=App\Controller\ProductFilterController::class,
 *             "openapi_context"={
 *                 "summary"="获取产品筛选可用的品牌、类型列表"
 *             }
 *         }
 *     },
 *     // 保留原有其他ApiResource配置不变
 * )
 * @ORM\Entity
 */
class Product
{
    // 原有实体代码完全不变
}

步骤2:创建自定义控制器

在src/Controller目录下新建ProductFilterController.php文件,代码如下:

<?php
namespace App\Controller;

use App\Repository\ProductRepository;
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
use Symfony\Component\HttpFoundation\JsonResponse;

class ProductFilterController extends AbstractController
{
    public function __invoke(ProductRepository $productRepository): JsonResponse
    {
        $queryResult = $productRepository->createQueryBuilder('p')
            // 直接查询去重后的品牌名、类型名,数据库层面执行性能更高
            ->select('DISTINCT b.name as brand, pt.name as type')
            ->join('p.idProductModel', 'pm')
            ->join('pm.idBrand', 'b')
            ->join('pm.idProductType', 'pt')
            // 如果不需要排除已软删除的产品,可删除下面这行
            ->andWhere('p.deletedAt IS NULL')
            ->getQuery()
            ->getScalarResult();

        // 整理成要求的返回格式
        return new JsonResponse([
            'brands' => array_values(array_unique(array_column($queryResult, 'brand'))),
            'types' => array_values(array_unique(array_column($queryResult, 'type')))
        ]);
    }
}

注意事项

  • 以上代码默认你的Brand实体存储品牌名称的字段为name,ProductType实体存储类型名称的字段为name,如果实际字段名不同,修改select语句中的对应字段即可
  • 该实现直接在数据库层面完成数据筛选和去重,即使产品数据量很大也不会有性能问题
  • 如果你需要对接口加权限控制,直接在控制器方法中添加权限校验逻辑即可

内容的提问来源于stack exchange,提问作者Naima

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.26 00:06:04