typescript - Hur kan vi filtrera sökresultat beroende på relationsvärden?


Jag använder NestJS med PostgreSQL.

Jag har en enkel OneToOne-relation mellan två repositorys: Address och Warehouse.

Jag försöker hämta alla adresser som inte har en lagerrelation. Jag har försökt använda Repositoriehanteraren istället för QueryBuilder.

Här är mina enheter:

@Entity()
export class Address {
    [key: string]: string | string[] | number | Record<string, unknown> | Date;
    @PrimaryGeneratedColumn({
        type: "bigint",
        name: "address_id",
    })
    id: string;

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

    @Field()
    @OneToOne(() => Warehouse, (warehouse: Warehouse) => warehouse.address, { nullable: true })
    warehouse?: string | null;
}

@Entity()
export class Warehouse {
    @PrimaryGeneratedColumn({
        type: "bigint",
    })
    id: string;

    @Field()
    @Column()
    name: string;

    @Field()
    @Column({ nullable: false })
    merchantId: string;

    @OneToOne(() => Address, { eager: true, cascade: true })
    @JoinColumn()
    address: Address;
}

Försöker den här koden:

    findAllAddresses(@Query() query: any) {
        return this.addressesService.find({
            relations: {
                warehouse: true
            },
            where: {
                warehouse: null
            }
        });
    }

Returnerar alla mina resultat. Även de med fältet warehouse: null.

Jag hittade och försökte med

            where: {
                warehouse: IsNull()
            }

Men min fråga ger faktiskt ett fel (inte i TS):

Denna relation stöds inte av den angivna sökoperatorn

Hur kan jag filtrera på detta fält/relation?

Svar #1

Försöker den här koden:

where: { warehouse: { id: ? } }