'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