我正在使用Sequelize(命中 PostgreSQL 数据库)开发高级查询。在纯 SQL 中这并不难,但我无法在 Sequelize 中使用它,部分原因是它们不支持复合外键。
描述我的问题的最好方法是用代码,所以我用我的问题的最小复制制作了一个存储库。您应该能够克隆它并按照自述文件中的说明在本地重现问题。基本上,如果您可以使查询无错误地运行并正确返回一个空的行数组,那么您就解决了我的问题:)
为方便起见,我将在此处复制查询和输出本身,但您可以检查 repo 以查看迁移、模型和 Sequelize 配置。
查询
const performQuery = (db) => {
const { usersRoles, invitations } = db; // eslint-disable-line max-len
const sql = {
include: {
model: invitations,
on: {
user: Sequelize.where(
Sequelize.col('usersRoles.userUid'),
'=',
Sequelize.col('invitations.guestUid')),
propertyManager: Sequelize.where(
Sequelize.col('usersRoles.propertyManagerUid'),
'=',
Sequelize.col('invitations.propertyManagerUid')),
tenant: Sequelize.where(
Sequelize.col('usersRoles.tenantUid'),
'=',
Sequelize.col('invitations.tenantUid')),
},
},
};
return usersRoles.findAll(sql);
};
Run Code Online (Sandbox Code Playgroud)
输出(截断)
TypeError: Cannot read property 'toUpperCase' of undefined
at str.trim.replace (/home/shawn/git/waltzapp/sequelize-troubleshooting/node_modules/sequelize/lib/utils.js:108:60)
at RegExp.[Symbol.replace] (native) …Run Code Online (Sandbox Code Playgroud)