sequelize.js - 在包含中指定字段
问题描述
当一个表在多个字段上与另一个表关联时,如何指定要在包含数组中使用的字段?
例如,假设您有一个名为“Review”的表,其中包含“CreatedBy”、“UpdatedBy”和“DeletedBy”列。
该表有 3 个关联,每个“xxxxBy”字段一个关联,并且都指向“用户”表。
现在,您想查询由特定用户创建的所有评论,您将如何使用 Sequelize 执行此操作?
const Review = sequelize.define('Review', {
id: {
allowNull: false,
primaryKey: true,
type: DataTypes.UUID
},
text: {
type: DataTypes.String,
allowNull: false,
},
createdBy: {
type: DataTypes.UUID,
allowNull: false,
},
updatedBy: {
type: DataTypes.UUID,
allowNull: false,
},
deletedBy: {
type: DataTypes.UUID,
},
}, {});
const User = sequelize.define('User', {
id: {
allowNull: false,
primaryKey: true,
type: DataTypes.UUID
},
name: {
type: DataTypes.String,
allowNull: false,
},
}, {});
Review.belongsTo(User, { foreignKey: 'createdBy' });
Review.belongsTo(User, { foreignKey: 'updatedBy' });
Review.belongsTo(User, { foreignKey: 'deletedBy' });
如果只有一个字段指向“用户”,我会做的查询。
Review.findAll({
include:[{
required: true,
model: User,
where: {
name: 'xxx'
}
}]
});
您如何指定连接是在“createdBy”上完成的?
我想我可以使用以下内容,但我希望有一种方法可以只说“on:'createdBy'”或“onField:'createdBy”等......
include.on: {Review.createdBy: User.id}
解决方案
给关联一个别名(使用 AS):
Review.belongsTo(User, { as: 'joinCreatedBy', foreignKey: 'createdBy'});
参考 findAll 中的别名:
Review.findAll({
include: [
{
model: User,
as: 'joinCreatedBy'
}]
....
在没有别名的情况下尝试一下- 您应该会看到一个错误,要求您确定要使用的关联...
推荐阅读
- python - 通过信号/槽连接传递的属性失去其类型
- java - 从执行器信息中隐藏构建信息 Spring boot
- indexing - 产品平面数据索引异常:SQLSTATE[42S22] [安装 Magento 2.4.1 和 2.4.3 企业版时] 重新索引问题
- computer-vision - 无法使用 vimbasrc 保存视频
- python - 如何在python数据框中的单行中连接同一主题ID的列句子?
- python - 在 PC 启动时使用命令运行 PyCharm
- c# - 如何在某个日期之后读取日志文件?
- php - Firebase 远程身份验证
- python - Jupyther 中相同值的相同 pandas 哈希,但在导出到 Bigquery 时没有
- multithreading - OTL TOmniBlockingCollection(COM 多线程)中的 CoInitialize/CoUninitialize 错误处理