typescript - Prisma Zelfrelatie met GraphQL in NestJS
Ik heb problemen met het gebruiken van prisma + GraphQL + NestJS. Het blijft zeggen dat het de GraphQL input type niet kan bepalen "Fout: Kan een GraphQL input type ("Org") voor de "parent" niet bepalen. Zorg ervoor dat je klasse is voorzien van een geschikte decorator."
Dit is mijn prisma-schema,
model Org {
id String @id @default(uuid())
name String
parentId String? //an org can have a single parent org
parent Org? @relation("ParentChildren", fields: [parentId], references: [id])
children Org[] @relation("ParentChildren") // This is a self relation
}
Dit is de dto voor creatie
import { Field, InputType } from '@nestjs/graphql';
import { Prisma } from '@prisma/client';
import { Org } from '../entities/org.entity';
@InputType()
export class OrgCreateInput implements Prisma.OrgCreateInput {
name: string;
@Field((type) => Org)
parent?: Prisma.OrgCreateNestedOneWithoutChildrenInput;
@Field((type) => Org)
children?: Prisma.OrgCreateNestedManyWithoutParentInput;
id?: string;
}
Entiteit
import { ObjectType } from '@nestjs/graphql';
import { Org as PrismaOrg } from '@prisma/client';
@ObjectType()
export class Org implements PrismaOrg {
parentId: string;
id: string;
name: string;
}
deel van de resolver
import { Resolver, Query, Mutation, Args } from '@nestjs/graphql';
import { OrgService } from './org.service';
import { Org } from './entities/org.entity';
import { OrgCreateInput } from './dto/create-org.input';
import { UpdateOrgInput } from './dto/update-org.input';
@Resolver(() => Org)
export class OrgResolver {
constructor(private readonly orgService: OrgService) {}
// create a org
@Mutation(() => Org, { name: 'createOrg' })
async createOrg(@Args('orgCreateInput') orgCreateInput: OrgCreateInput) {
return this.orgService.create(orgCreateInput);
}
Onderdeel van de dienstverlener
import { Injectable } from '@nestjs/common';
import { Prisma, Org } from '@prisma/client';
import { PrismaService } from '../prisma/prisma.service';
@Injectable()
export class OrgService {
constructor(private prisma: PrismaService) {}
async create(data: Prisma.OrgCreateInput): Promise<Org> {
return this.prisma.org.create({
data,
});
}
Hoe gaan we om met zelfrelaties in GraphQL? Moeten we gewoon basisstrings gebruiken in de GraphQL-invoer, maar vervolgens de zelfrelatie binnen Prisma uitvoeren? Of is er een betere manier?
Dank je!
Antwoord #1
Ik had hetzelfde soort problemen met Nest en Prisma. Ik heb het op deze manier opgelost.
@ObjectType()
export class Type {
@Field(() => [Type])
subs: Type[];
}
