Как найти модель по значению в отношениях OneToMany? - PullRequest
0 голосов
/ 23 января 2020

Я хочу иметь возможность найти модель пользователя на основе значения внутри отношения OneToMany.

Вот моя функция:

async getUserViaPlatform(provider: string, id: string) {
        return await this.webUserRepository.findOne({
            profiles: [{
                provider,
                platformID: id
            }]
        });
    }

Модель пользователя:

@Entity()
export class WebUser {
    @PrimaryGeneratedColumn()
    id!: number;

    @Column()
    name!: string;

    @Column({ nullable: true })
    picture?: string;

    @OneToMany(type => WebProfile, webProfile => webProfile.user, { eager: true })
    profiles!: WebProfile[];

    @CreateDateColumn()
    createdAt!: Date;

    @UpdateDateColumn()
    updatedAt!: Date;
}

И "WebProfile" - это

@Entity()
export class WebProfile {
    @PrimaryGeneratedColumn()
    id!: number;

    @Column()
    provider!: string;

    @Column()
    email!: string;

    @Column()
    platformID!: string;

    @ManyToOne(type => WebUser, user => user.profiles)
    user!: WebUser;

    @CreateDateColumn()
    createdAt!: Date;

    @UpdateDateColumn()
    updatedAt!: Date;
}

Я хочу, чтобы пользователь находился там, где у него есть профиль, соответствующий поставщику и идентификатору. Но все, что сейчас происходит, - это возвращение первого пользователя, независимо от того, что я даю функции.

1 Ответ

0 голосов
/ 23 января 2020

Вам необходимо использовать QueryBuilder с объединением :

await this.webUserRepository.createQueryBuilder('webUser')
    .leftJoinAndSelect('webUser.profiles', 'profile')
    .where   ('profile.provider   = :provider', { provider: '...' })
    .andWhere('profile.platformID = :platformID', { platformID: '...' })
    .getOne();
...