我有一个具有这些字段的实体
@Column({ name: "total_amount_paid", type: "decimal", precision: 10, scale: 2, nullable: true })
totalAmountPaid: number;
@Column({ name: "last_paid_date", type: "date", nullable: true })
lastPaidDate: Date;
我正在使用事务基础查询,因此使用这样的查询管理器
async _updateAgreementsForPayment(
queryRunnerManager: EntityManager, agreements: AgreementDto[], paidDate: Date
): Promise<UpdateResult> {
const agreementIds = agreements.map((agreement) => agreement.id);
// Save the updated entities
return queryRunnerManager.update(
AgreementEntity, // Target entity
agreementIds, // Conditions
{ lastPaidDate: paidDate } // Values to be updated
);
}
现在与
lastPaidDate
一起我想更新totalAmountPaid
,应该像这样计算
totalAmountPaid = totalAmountPaid + agreementDto.paidAmount
是否可以通过更新很多或其他东西?
如果
agreementDto.paidAmount
对于您可以使用的所有记录都相同:
queryRunnerManager.update(
AgreementEntity,
agreementIds,
{
lastPaidDate,
totalAmountPaid: () => `totalAmountPaid + ${paidAmount}`
}
);
如果
paidAmount
可能因记录而异,您可以使用 CASE
:
queryRunnerManager.update(
AgreementEntity,
agreementIds,
{
lastPaidDate,
totalAmountPaid: () => {
return `
amount + CASE
${agreements.map((agreementDto) => `WHEN id = ${agreementDto.id} THEN amount + ${agreementDto.paidAmount}`).join(' ')}
ELSE amount
END
`
}
}
);
但要小心,因为在这种形式下你应该进行一些检查以防止 SQL 注入。