[英]Prisma model Generation -
如果問題是基本的,我很抱歉,我是初學者。
schema.prisma 定義中是否有一種方法可以強制將一個列作為對其他幾個列進行操作的結果?
例如第 1 列 = 總和(第 2 列 + 第 3 列)?
所有這些都在同一張桌子上。 因此,如果修改了第 3 列,第 1 列也會自動更新。
先感謝您
雖然 Prisma 本身不支持 生成的列,但您可以使用 Postgres 觸發器來實現相同的行為。
以下是使用 Prisma 時如何創建具有“生成”列值的數據庫表的分步示例。
這應該是不言自明的。 虛擬示例:
model Foo {
id Int @id @default(autoincrement())
col1 Int
col2 Int
colSum Int? // colSum = col1 + col2
}
只要在Foo
表上有創建或更新操作,觸發器就會更新colSum
字段的值。 這就是它的樣子
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 所示。
為 model Foo
創建一個新的遷移文件,但不要應用遷移,因為您將手動對其進行一些更改。 您可以使用--create-only
標志來執行此操作。
npx prisma migrate dev --create-only
Go 到生成的遷移的migration.sql
文件,最后粘貼步驟 2 中提供的 SQL。
應用遷移
npx prisma migrate dev
現在,無論何時您對col1
或col2
進行更改,它都應該自動反映在colSum
中。
帶有觸發器的解決方案在數據庫服務器中執行操作。 您也可以使用Prisma Middleware在應用程序層進行這些更新。 在 Prisma 中調用查詢之前,只需手動執行相同的更新。
但是,有很多條件需要檢查,並且在應用層進行檢查會對性能產生不必要的影響。 對於您提到的簡單用例,我不建議這樣做。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.