'Get ManyToOne field using TypeORM and Graph QL query
I have a problem with a TypeORM entity from my project. The code for entity is shown below.
import { Field, ObjectType } from "type-graphql";
import { BaseEntity, Column, Entity, ManyToOne, PrimaryColumn, PrimaryGeneratedColumn } from "typeorm";
import { MusicProvider } from "./MusicProvider";
import { User } from "./User";
@ObjectType()
@Entity()
export class UserMusicProvider extends BaseEntity {
@Field()
@PrimaryGeneratedColumn()
id!: number;
@Field(() => User)
@ManyToOne(() => User, (user) => user.id, { onDelete: 'CASCADE', cascade: true })
user: User
@PrimaryColumn()
userId: number
@Field(() => MusicProvider)
@ManyToOne(() => MusicProvider, (musicProvider) => musicProvider.id, { onDelete: 'CASCADE', cascade: true })
musicProvider: MusicProvider
@Column()
musicProviderId: number
@Field()
@Column()
musicProviderUserId: string;
}
As you can see, it has a field for MusicProvider. Into my GraphQL query I want to be able to get the MusicProvider's data, because I want to show this data into my app. I want to do this whitin this query, not using two queries.
The problem is that when I call this query:
query{
getUserMusicProviders(userId: 27){
userMusicProviders{
id
musicProviderUserId
musicProvider{
id
name
}
}
errors{
field
message
}
}
}
i receive an error saying:
Cannot return null for non-nullable field UserMusicProvider.musicProvider.
which is true, because, as I checked, the MusicProvider returned is undefined. I don't know why this happens and would be really helpful to solve this issue.
The code for my query is this:
@Query(() => UserMusicProvidersResponse)
async getUserMusicProviders(
@Arg("userId") userId: number
): Promise<UserMusicProvidersResponse | null> {
const resp = await UserMusicProvider.find({ where: { userId } })
return {
userMusicProviders: resp
}
}
and the code for the UserMusicProvidersResponse is:
@ObjectType()
export class UserMusicProvidersResponse {
@Field(() => [FieldError], { nullable: true })
errors?: FieldError[];
@Field(() => [UserMusicProvider], { nullable: true })
userMusicProviders?: UserMusicProvider[]
}
Thank you for your time and thank you for trying to help me. If you want to clarify something, feel free to send a comment.
Sources
This article follows the attribution requirements of Stack Overflow and is licensed under CC BY-SA 3.0.
Source: Stack Overflow
| Solution | Source |
|---|
