【发布时间】:2020-04-14 01:31:03
【问题描述】:
documents 表出现错误包括:
Include unexpected. Element has to be either a Model, an Association or an object.:
const users = await db.users.findAll({
where: {
profile_photo: { [Op.ne]: null },
},
include: [
{
model: db.documents,
}
],
});
documents 的相关部分定义和关联:
const document = sequelize.define(
'document',
{
id: {
allowNull: false,
primaryKey: true,
type: DataTypes.UUID,
defaultValue: sequelize.literal('uuid_generate_v4()'),
},
user_id: {
type: DataTypes.UUID,
references: {
model: 'users',
key: 'id',
},
},
}
);
document.associate = function(models) {
models.document.belongsTo(models.users, {
foreignKey: {
name: 'user_id',
allowNull: false,
},
});
};
PSequel 将文档表上的外键返回为:
键名:
documents_user_id_fkey
列:
user_id
外表:
users
外栏:
id
这个 psql 查询会为用户返回文档:
SELECT D
FROM users U
INNER JOIN documents D ON D.user_id = U.id
此查询包括查询确实可以使用emails 表,并为用户返回电子邮件:
const users = await db.users.findAll({
where: {
profile_photo: { [Op.ne]: null },
},
include: [
{
model: db.emails,
}
],
});
emails 的相关部分定义和关联:
const Emails = sequelize.define(
'emails',
{
id: {
type: DataTypes.UUID,
defaultValue: sequelize.literal('uuid_generate_v4()'),
primaryKey: true,
},
user_id: {
type: DataTypes.UUID,
references: {
model: 'users',
key: 'id',
},
allowNull: false,
},
);
Emails.associate = models => {
models.emails.belongsTo(models.users, {
onDelete: 'CASCADE',
foreignKey: {
name: 'user_id',
allowNull: false,
},
});
};
PSequel 将emails 表上的外键返回为:
键名:
emails_user_id_fkey
列:
user_id
外表:
users
外栏:
id
为什么documents 表的行为与emails 不同?
注意:我最近确实将 Documents 的 Sequelize 关联从名称:id 更改为 user_id,我是否需要以某种方式重新初始化该关联?
原来是这样的:
models.document.belongsTo(models.users, {
foreignKey: {
name: 'id',
allowNull: false,
},
});
收件人:
models.document.belongsTo(models.users, {
foreignKey: {
name: 'user_id',
allowNull: false,
},
});
【问题讨论】:
标签: node.js postgresql sequelize.js