【问题标题】:Is there a way to limit the number of records for a user using Prisma?有没有办法限制使用 Prisma 的用户的记录数?
【发布时间】:2022-11-02 20:36:02
【问题描述】:
我能给出的最简单的例子是一个可以创建多个帖子的用户。可以将多个帖子绑定到单个用户的一对多关系。
但是,如果我希望用户最多只能有 10 个帖子怎么办?理想情况下,我可以在创建新帖子时运行某种查询,如果已达到限制,则拒绝创建该帖子(或可能替换帖子)。
我对此感到有些困惑。而且我不确定是否有一种方法可以对此进行建模以创建所需的结果。
否则,我看到的唯一真正的解决方案是获取用户的所有帖子,并在尝试创建新帖子之前对其进行计数。但这需要两次调用数据库而不是一次,这是我试图避免的问题。
【问题讨论】:
标签:
node.js
database
postgresql
prisma
【解决方案1】:
你考虑过数据库吗扳机?下面的例子取自this StackExhange post:
CREATE OR REPLACE FUNCTION check_number_of_row()
RETURNS TRIGGER AS
$body$
BEGIN
IF (SELECT count(*) FROM your_table) > 10
THEN
RAISE EXCEPTION 'INSERT statement exceeding maximum number of rows for this table'
END IF;
END;
$body$
LANGUAGE plpgsql;
CREATE TRIGGER tr_check_number_of_row
BEFORE INSERT ON your_table
FOR EACH ROW EXECUTE PROCEDURE check_number_of_row();
不幸的是,Prisma 似乎还不支持触发器,所以你必须在 SQL 中定义它:https://github.com/prisma/prisma/discussions/2382