首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Prisma模型生成-

Prisma模型生成-
EN

Stack Overflow用户
提问于 2021-08-24 14:46:24
回答 1查看 1.2K关注 0票数 1

对不起,如果问题是基本的,我是初学者。

schema.prisma定义中是否有一种方法来强制一个列是对其他几个列的操作的结果?

例如第1栏=求和(第2栏+第3栏)?

都在同一张桌子上。这样,如果修改了第3列,那么第1列也会自动更新。

提前谢谢你

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-08-25 11:36:34

虽然Prisma中本机不支持生成列,但您可以使用Postgres触发器来实现相同的行为。

下面是一个逐步示例,说明如何在使用Prisma时创建具有“生成”列值的数据库表。

1.使用可选的生成列创建Prisma模式

这应该是不言而喻的。虚构的例子:

代码语言:javascript
复制
model Foo {
  id        Int      @id @default(autoincrement())
  col1 Int
  col2 Int
  colSum Int?  // colSum = col1 + col2
}

2.写扳机

colSum表上有创建或更新操作时,触发器将更新Foo字段的值。这就是它看起来的样子

代码语言:javascript
复制
CREATE OR REPLACE FUNCTION trigger_col_update()
RETURNS TRIGGER
AS $$
BEGIN
  NEW."colSum" := NEW."col1" + NEW."col2";

RETURN NEW;
END;
$$ LANGUAGE plpgsql;

CREATE TRIGGER set_col_trigger
    BEFORE INSERT OR UPDATE ON "Foo"
                         FOR EACH ROW
                         EXECUTE PROCEDURE trigger_col_update();

您可以为数据库手动调用这些SQL命令,但我建议将它们存储在迁移历史记录中,如步骤3所示。

3. (可选)在迁移历史记录中添加触发器

为模型Foo创建一个新的迁移文件,但不要应用迁移,因为您将手动对其进行一些更改。您可以使用--create-only标志来完成这一任务。

代码语言:javascript
复制
npx prisma migrate dev --create-only      

转到生成的迁移的migration.sql文件,最后粘贴步骤2中提供的SQL。

应用迁移

代码语言:javascript
复制
npx prisma migrate dev  

现在,每当您对col1col2进行更改时,它都应该自动反映在colSum中。

备选方案: Prisma中间件

带有触发器的解决方案在数据库服务器中执行操作。您还可以使用Prisma中间件在应用层进行这些更新。在Prisma中调用查询之前,只需手动执行相同的更新即可。

然而,在应用层有很多条件进行检查和执行,对性能产生了不必要的影响。对于您提到的简单用例,我不建议这样做。

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/68909400

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档