如何使用hasOne和sequelize.js引用两个表
How to reference two tables using hasOne with sequelize.js
考虑到这3个由sequelize auto:生成的模型
sequelize.define('users', {
id: {
type: DataTypes.INTEGER,
allowNull: false,
primaryKey: true,
autoIncrement: true
},
first: {
type: DataTypes.STRING,
allowNull: true
},
last: {
type: DataTypes.STRING,
allowNull: true
}
}, {
tableName: 'users',
underscored: true,
timestamps: false
});
sequelize.define('groups', {
id: {
type: DataTypes.INTEGER,
allowNull: false,
primaryKey: true,
autoIncrement: true
},
parent_id: {
type: DataTypes.INTEGER,
allowNull: true,
references: {
model: 'groups',
key: 'id'
}
}
}, {
tableName: 'groups',
underscored: true,
timestamps: false
});
sequelize.define('user_groups', {
group_id: {
type: DataTypes.INTEGER,
allowNull: false,
primaryKey: true,
references: {
model: 'groups',
key: 'id'
}
},
user_id: {
type: DataTypes.INTEGER,
allowNull: false,
references: {
model: 'users',
key: 'id'
}
}
}, {
tableName: 'user_groups',
underscored: true,
timestamps: false
});
我本来希望生成hasOne语句,但我必须这样指定它们:
user_groups.hasOne(orm.models.users, { foreignKey: "id" });
user_groups.hasOne(orm.models.groups, { foreignKey: "id" });
还要考虑表中的以下数据:
users (id, first, last):
1, John, Doe
group (id, parent_id):
1, NULL
2, NULL
3, NULL
4, NULL
user_groups (group_id, user_id):
1, 1
4, 1
执行此查询:
sequelize.findAll("user_groups", {
attributes: ["*"],
raw: true,
include: [{
model: models.users,
}]
});
我得到以下结果:
[ { group_id: 4,
user_id: 1,
'user.id': null,
'user.first': null,
'user.last': null },
{ group_id: 1,
user_id: 1,
'user.id': 1,
'user.first': 'John',
'user.last': 'Doe' } ]
这清楚地表明sequelize正在为user_id关系使用group_id。
如何指定将user_groups关系链接到其各自表的关系,以便能够将用户关联到多个组?
我也很好奇模型定义中的"references"键应该如何工作,因为文档中没有这方面的内容。
我能够使用以下关联获取引用的数据:
groups.hasMany(orm.models.user_groups);
user_groups.belongsTo(orm.models.groups, {foreignKey: "group_id", as: "group"});
users.hasMany(orm.models.user_groups);
user_groups.belongsTo(orm.models.users, {foreignKey: "user_id", as: "user"});
以及以下查询:
sequelize.findAll("user_groups", {
attributes: ["*"],
raw: true,
include: [
{ model: users, foreignKey: "user_id", as: "user", attributes: ["first", "last"] }
]
});
预期结果:
[ { group_id: 4,
user_id: 1,
'user.first': 'John',
'user.last': 'Doe' },
{ group_id: 1,
user_id: 1,
'user.first': 'John',
'user.last': 'Doe' } ]
相关文章:
- 如何使用hasOne和sequelize.js引用两个表
- 在两个解决方案中引用通用的Javascript文件
- 两个指令引用一个变量,但第二个指令不引用;不要急于改变
- 使用javascript"随机引用“;脚本,但跨越两个独立的元素
- 两个字符串引用相同的值
- 是否可以在猫鼬中相互引用两个模式
- Javascript:从给定的两个片段中引用“this”的可接受方式
- Javascript结合了两个保持引用的对象
- 以角度交叉引用两个数据集
- ASP:在两个ScriptManager之间切换.或者如何删除脚本引用
- 同时引用两个php文件
- ===当两个引用都应该指向同一个对象时,在Nashorn中返回false
- MongoDB-插入到两个集合中,一个集合引用另一个作为子文档
- 对同一个对象的两个引用是否可能是!==
- 为什么对原型的这两个引用返回不同的值?
- jquery引用错误,同时获得两个版本的jquery
- 两个javascript文件,引用一个库
- 如何检查两个变量是否引用同一个DOM对象
- 有没有办法看看两个“;参考文献“;在Google Places API中引用相同的位置
- 如何在 html 索引中引用两个使用 jquery 的 HTML 文件