对象字面量只能指定已知属性,并且 'clientId' 类型不存在 'RatesWhereUniqueInput'

Object literal may only specify known properties, and 'clientId' does not exist in type 'RatesWhereUniqueInput'

我在使用带有 prisma 和 typegraphql 的打字稿时遇到了这个类型错误。 RatesWhereUniqeInput 由 prisma 生成,并将自己定义为“CompoundUniqueInput”,因为我引用的数据库有 2 个键(clientId:字符串,employeeId:数字)。

在我的存储库中,我想使用这两个来使用“update()”来引用特定的数据库行,但是因为类型是在 prisma 客户端中生成的 clientId_employeeId?我收到类型错误。

存储库功能

    async update(model: Rates): Promise<Rates> {
        const { employeeId, clientId, ...data } = this.mapper.from(model);

        const entity = await this.db.rates.update({
            where: { employeeId, clientId },
            data: {
                ...data,
            },
        });

        return this.mapper.to(entity);
    }

棱镜index.d.ts

  export type RatesWhereUniqueInput = {
    clientId_employeeId?: RatesClientIdEmployeeIdCompoundUniqueInput
  }

ratesmapper.ts

@injectable()
export class RatesMapper {
    public from(model: Rates): RatesEntity {
        return {
            employeeId: model.employeeId,
            clientId: model.clientId,
            rateFull: model.rateFull,
            rateQuarter: model.rateQuarter,
            rateLine: model.rateLine,
            rateWord: model.rateWord,
            createdAt: model.createdAt,
            updatedAt: model.updatedAt,
        };
    }

    public to(entity: RatesEntity): Rates {
        return new Rates({
            ...entity,
        });
    }
}

澄清一下,您正在尝试 运行 update 使用 prisma 查询来自 Rates table/model 的单个记录。为此,您的 where 条件出现错误。

解决方案

尝试按如下方式更改 update 查询:

const entity = await this.db.rates.update({
        where: {
            clientId_employeeId: {
                employeeId,
                clientId,
            },
        },
        data: {
            ...data,
        },
    });

这是 Prisma 在为具有复合 ID 或唯一标识符(由模型的多个字段组成的 ID 或唯一标识符)的模型指定 where 条件时使用的语法。您可以在 Prisma 文档中 CRUD Reference Guide 通过化合物 ID 或化合物唯一标识符获取记录 小节中阅读更多内容。