【发布时间】:2020-06-12 18:17:12
【问题描述】:
使用 Knex 对我的 Postgres 数据库进行查询。我有一个使用 Knex QueryBuilder 提供“基本”查询的函数。在我需要向 SELECT 语句添加原始内容之前,这可以正常工作。据我所知,运行.raw 总是希望返回一个结果。不过,我只需要将它添加到 QueryBuilder 中,这样它就可以由我的应用程序的不同部分执行。
const baseQuery = knex
.select(newUserFields)
.from('users')
.leftJoin('user_roles', 'users.id', 'user_roles.user_id')
.leftJoin('roles', 'user_roles.role_id', 'roles.id')
.leftJoin('role_permissions', 'roles.id', 'role_permissions.role_id')
.leftJoin(
'permissions',
'permissions.id',
'role_permissions.permission_id'
)
.groupBy(
'users.id',
'users.email',
'users.name',
'users.status',
'users.created_at',
'users.password_reset_expiration',
'users.password',
'users.password_reset_token'
)
.orderBy('users.created_at', 'desc');
我需要在选择中添加以下内容:
knex.raw('to_json(array_agg(distinct roles.name)) as roleNames')
knex.raw('to_json(array_agg(distinct permissions.name)) as permissionNames')
如何将这些原始选择添加到基本查询中,以便可以将基本查询作为 QueryBuilder 传递给不同的函数并添加到?
【问题讨论】:
标签: node.js postgresql knex.js