我在关联 2 个模型时遇到问题。我会尽量详细地描述问题,希望你能帮助我。
我有 2 个模型:Zone 和 PLZ(两者也是 database-mysql 中的表)。
一个区域可以有多个 PLZ,一个 PLZ 可以属于一个区域。
在保存带有 PLZ 的区域时,我有一个名为“zone_plz”的表,只有两列:zone_id 和 plz_id。两者都有 Zone.id 和 PLZ.id 的外键
区域模型:
const Sequelize = require('sequelize');
const sequelize = require('../util/database');
const PLZ = require('../models/PLZ');
const zone_plz = require('../models/relations/zone_plzs');
const Zone = sequelize.define('zone', {
name: {
type: Sequelize.STRING,
allowNull: false
},
color: {
type: Sequelize.STRING,
allowNull: false
}
}, {
timestamps: true
});
module.exports = Zone;
LZ型号:
const Sequelize = require('sequelize');
const sequelize = require('../util/database');
const Zone = require('../models/Zone');
const zone_plz = require('../models/relations/zone_plzs');
const PLZ = sequelize.define('plz', {
plz: {
type: Sequelize.INTEGER,
allowNull: false
},
city: {
type: Sequelize.STRING,
allowNull: false
},
district: {
type: Sequelize.STRING
}
});
module.exports = PLZ;
这是 zone_plz 模型:
const Sequelize = require('sequelize');
const sequelize = require('../../util/database');
const PLZ = require('../../models/PLZ');
const Zone = require('../../models/Zone');
const zone_plz = sequelize.define('zone_plz', {
zone_id: {
type: Sequelize.INTEGER,
allowNull: false,
references: {
model: Zone,
key: 'id',
}
},
plz_id: {
type: Sequelize.INTEGER,
allowNull: false,
references: {
model: PLZ,
key: 'id',
}
}
}, {
timestamps: true
});
module.exports = zone_plz;
这就是我查询它的方式:
router.get('/', function (req, res, next) {
zone_plz.findAll({
include: [{
model: PLZ,
as: 'plz'
},
{
model: Zone,
as: 'zone'
}]
}).then((result) => {
res.send({status: true, data: result})
}).catch(function (err) {
next(err)
})
});
如您所见,我想将一个包含所有所属 plz 的区域返回给用户。
我是 Sequelize 的新手,我也不确定这是否是正确的方法。我收到错误消息: plz 与 zone_plz 无关!
谁能帮我?
最佳答案
您创建了引用,而不是关联。请首先阅读不同之处:Sequelize model references vs associations
然后在 plz 和 zone 之间创建关联,例如:
plz.belongsToMany(zone, {through: 'zone_plz'});
zone.belongsToMany(plz, {through: 'zone_plz'});
关于mysql - 在 sequelize 中关联两个表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53251874/