就是这张table
model wallet {
id Int @id @default(autoincrement())
userId Int @unique
balance Int @default(0)
joining_bonus Int @default(0)
referral_bonus Int @default(0)
incentive Int @default(0)
user user @relation(fields: [userId], references: [id])
}
model transaction {
id Int @id @default(autoincrement())
userId Int
type String
amount Int
curBalance Int
payment_gateway String
payment_id String
status transaction_status @default(PENDING)
timestamp DateTime @default(now())
user user @relation(fields: [userId], references: [id])
}
我想执行这个查询
const transaction = await prisma.transaction.create({
data: {
amount: amount,
type: type,
payment_gateway: payment_gateway,
payment_id: payment_id,
curBalance: {
//get data from wallet table and select balance field
},
user: {
connect: {
id: parseInt(req.user.id)
}
}
}
});
我想在创建交易记录的同时从钱包表中获取数据,因为如果我在不同的查询中这样做,由于异步调用,可能会有时间差,我可以获得不同的当前余额值。
如果这个查询是可能的,告诉我如何或如果不是如何做到这一点,所以我可以总是最新的数据。
1条答案
按热度按时间sqougxex1#
Prisma目前不支持子选择或从另一个表中获取数据,同时以您尝试实现的方式创建记录。
为了实现这一点,您将需要使用事务来确保这些操作以原子方式并以正确的顺序发生。您将首先获取用户的当前余额,然后在创建事务记录时使用该数据。
您可以使用数据库事务,在阅读事务中的余额值时,可以使用数据库级别的锁(如
SELECT FOR UPDATE
)来防止它在事务完成时更新。下面是一个例子,它可能看起来像: