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

基于Prisma GraphQL Schema,如何编写查询至少拥有一首Track的Artist的GraphQL语句?

获取至少拥有一首Track的Artist查询实现

我来帮你搞定这个需求——筛选出至少关联了一首Track的Artist。咱们直接基于你现有的代码来修改,操作很简单:

核心原理

要实现这个筛选,咱们需要利用Prisma的关系查询条件some,它可以用来检查某个关联关系中是否存在至少一条符合条件的记录。对于你的场景,只要Artist的tracks关联里有至少一条记录,就满足要求。

修改后的Resolver代码

直接更新你的ArtistResolver里的查询逻辑,给findMany和count都加上过滤条件:

import { Resolver, ArgsType, Field, Args, Query, Ctx, ObjectType, Int } from "type-graphql";
import { Artist } from "@generated/type-graphql";
import { Context } from "../interfaces";

@ArgsType()
export class ArtistArgs {
  @Field((type) => Int, { nullable: false })
  page!: number;

  @Field((type) => Int, { nullable: false })
  take!: number;
}

@ObjectType()
export class ArtistResponse {
  @Field(type => [Artist])
  artists: Artist[] =[];

  @Field((type) => Int, { nullable: false })
  total!: number;
}

@Resolver()
class ArtistResolver {
  //@Authorized("ADMIN")
  @Query((returns) => ArtistResponse, { nullable: true })
  async getArtists(@Ctx() { req, res, prisma }: Context, @Args() { page, take }: ArtistArgs): Promise<ArtistResponse | null> {
    // 添加 tracks.some 条件筛选有至少一首Track的Artist
    const artists = await prisma.artist.findMany({
      take: take,
      skip: (page - 1) * take,
      orderBy: [
        { name: "asc" }
      ],
      where: {
        tracks: {
          some: {} // 空对象表示只要存在至少一条关联Track即可
        }
      },
      // 可选:如果需要同时返回关联的Track,可以加上include
      // include: {
      //   tracks: { take: 5 } // 比如只返回每个Artist的前5首Track
      // }
    });

    // 统计时也要用相同的过滤条件,确保总数准确
    const count = await prisma.artist.count({
      where: {
        tracks: {
          some: {}
        }
      }
    });

    return { artists, total: count };
  }
}

export default ArtistResolver;

扩展说明

如果之后你需要更精确的筛选(比如只统计拥有活跃Track的Artist),只需要给some加上具体条件就行:

where: {
  tracks: {
    some: {
      active: true // 只关联了活跃状态Track的Artist
    }
  }
}

GraphQL查询示例

你可以用下面的查询语句来测试效果:

query GetArtistsWithTracks {
  getArtists(page: 1, take: 10) {
    artists {
      id
      name
      profile_picture
      tracks {
        id
        title
        mp3_url
      }
    }
    total
  }
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.28 16:23:10