Nest TypeORM Postgres 根据 Posts Table 中的 userId 更新用户的列('number of posts')
Nest TypeORM Postgres update user's column('number of posts') based on the userId in the Posts Table
我想知道如果 Posts table 更新,是否可以自动更新用户的列 ('number of posts')。 Post 实体与用户 ('userId') 具有多对一关系。有没有办法让用户 Table “听” Post Table 并自动更新 post 列的数量,或者我需要把它写在 post 服务创建函数这样做。我是 sql 的新手,所以我只是在尝试新事物。我正在使用 NestJS、typeORM、Postgres 和 Graphql
您不想复制该数据。这就是关系数据库的全部思想,即不同的数据保存在不同的 tables.
如果您想避免每次都使用 JOIN 键入查询,您可以创建一个视图。
例如,您可以创建以下视图:
CREATE VIEW userPosts AS
SELECT
user.id,
user.name,
COUNT(posts.id)
FROM users
LEFT JOIN posts ON user.id = posts.user_id
ORDER BY user.id;
创建视图后,您可以像查询 table 一样查询它。
SELECT * FROM userDate WHERE id = '0001';
当然,我没有您的 table 定义和数据,因此您需要根据您的 table 调整此代码。
@Kendle 的答案确实有效,并且具有将计算和复杂性推到数据库服务器上的优势。或者,您可以利用 TypeORM 的订阅者功能在应用程序中保留该逻辑。可以找到文档 here.
在您的特定用例中,您可以为实现 afterInsert
和 afterRemove
(或 afterSoftRemove
,如果您软删除帖子)的实体注册订阅者分别递增和递减计数器。
我想知道如果 Posts table 更新,是否可以自动更新用户的列 ('number of posts')。 Post 实体与用户 ('userId') 具有多对一关系。有没有办法让用户 Table “听” Post Table 并自动更新 post 列的数量,或者我需要把它写在 post 服务创建函数这样做。我是 sql 的新手,所以我只是在尝试新事物。我正在使用 NestJS、typeORM、Postgres 和 Graphql
您不想复制该数据。这就是关系数据库的全部思想,即不同的数据保存在不同的 tables.
如果您想避免每次都使用 JOIN 键入查询,您可以创建一个视图。
例如,您可以创建以下视图:
CREATE VIEW userPosts AS
SELECT
user.id,
user.name,
COUNT(posts.id)
FROM users
LEFT JOIN posts ON user.id = posts.user_id
ORDER BY user.id;
创建视图后,您可以像查询 table 一样查询它。
SELECT * FROM userDate WHERE id = '0001';
当然,我没有您的 table 定义和数据,因此您需要根据您的 table 调整此代码。
@Kendle 的答案确实有效,并且具有将计算和复杂性推到数据库服务器上的优势。或者,您可以利用 TypeORM 的订阅者功能在应用程序中保留该逻辑。可以找到文档 here.
在您的特定用例中,您可以为实现 afterInsert
和 afterRemove
(或 afterSoftRemove
,如果您软删除帖子)的实体注册订阅者分别递增和递减计数器。