【发布时间】:2021-04-05 03:33:45
【问题描述】:
我有两张桌子。
广告系列
| id | cause | GoalType | Target |
|---|---|---|---|
| 1 | 5 | 0 | 5000 |
| 2 | 4 | 1 | 34500 |
| 3 | 5 | 1 | 50000 |
| 4 | 1 | 0 | 9000 |
| 5 | 8 | 1 | 35000 |
| 6 | 3 | 1 | 60000 |
模型定义为:
module.exports = (sequelize, Sequelize) => {
const Campaigns = sequelize.define('Campaigns', {
id: { type: Sequelize.INTEGER, primaryKey: true, autoIncrement: true },
cause: Sequelize.INTEGER,
goalType: Sequelize.INTEGER,
target: Sequelize.FLOAT,
}, {
freezeTableName: true,
});
return Campaigns
}
Campaign_Tasks
| id | uuid | action | Status | userId |
|---|---|---|---|---|
| 1 | 001-0000004 | 2 | 0 | 50 |
| 2 | 001-0000004 | 1 | 4 | 60 |
| 3 | 001-0000003 | 2 | 7 | 50 |
| 4 | 001-0000007 | 0 | 10 | 40 |
| 5 | 001-0000010 | 1 | 3 | 30 |
| 6 | 001-0000003 | 0 | 5 | 50 |
模型定义为:
module.exports = (sequelize, Sequelize) => {
const Campaign_Tasks = sequelize.define('Campaign_Tasks', {
id: { type: Sequelize.INTEGER, primaryKey: true, autoIncrement: true },
userId: Sequelize.INTEGER,
uuid: Sequelize.STRING,
action: Sequelize.INTEGER,
status: Sequelize.INTEGER,
}, {
freezeTableName: true,
});
return Campaign_Tasks
}
tasks表中的每个UUID都对应campaign表中的id(每个UUID都是从id间接生成的,这个过程是可逆的)。但可以看出,两个表中都没有公共列。 我需要根据活动表中的 id 和活动表中的 uuid 找到这两个表的内连接(其中 uuid 不是活动表的 PK)
按照本教程:https://lorenstewart.me/2016/09/12/sequelize-table-associations-joins/ 我创建了一个数据库对象。这是必要的,因为我无法在任何一个模型文件中定义关联,因为我不断收到这里提到的错误:hasMany called with something that's not an instance of Sequelize.Model
const db = require('./models/index')
const db_ = {};
db_.Sequelize = db.Sequelize;
db_.sequelize = db.sequelize;
//Models/tables
db_.campaigns = require('./models/campaigns')(db.sequelize, db.Sequelize);
db_.campaign_Tasks = require('./models/campaignTasks')(db.sequelize, db.Sequelize);
//Relations
db_.campaign_Tasks.belongsTo(db_.campaigns);
db_.campaigns.hasMany(db_.campaign_Tasks);
module.exports = db_;
如何对这两个表进行内部联接。我正在寻找这样的东西:
const uuidToId = require('../../helpers/uuidToId')
let rows = await db_.campaign_Tasks.findAll({
include: [{
model: db_.campaigns,
required: true,
where: {
id: uuidToId.uuidToId(/*<-uuid from campaign_Tasks rows->*/)
}
}]
})
uuidToId 将 UUID 转换回 id。提前致谢。
【问题讨论】:
标签: javascript node.js join sequelize.js inner-join