在 sequelize 中关联两个表
Posted
技术标签:
【中文标题】在 sequelize 中关联两个表【英文标题】:assotiating two tables in sequelize 【发布时间】:2019-04-14 13:36:05 【问题描述】:我在关联 2 个模型时遇到问题。我会尽可能详细地描述问题,希望您能帮助我。
我有 2 个模型:Zone 和 PLZ(两者也是 database-mysql 中的表)。 一个 Zone 可以有多个 PLZ,一个 PLZ 可以属于一个 zone。
在保存带有 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;
PLZ型号:
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 的区域返回给用户。
我是续集的新手,我也不确定这是否是正确的方法。我收到错误:plz is not associated to zone_plz!
谁能帮帮我?
【问题讨论】:
【参考方案1】:您创建了引用,而不是关联。请首先阅读差异:Sequelize model references vs associations 然后在 plz 和 zone 之间创建关联,例如:
plz.belongsToMany(zone, through: 'zone_plz');
zone.belongsToMany(plz, through: 'zone_plz');
【讨论】:
我在我的 zone_plz 模型中写这个但得到错误:PLZ.belongsToMany(Zone, through: 'zone_plz'); ^ TypeError: PLZ.belongsToMany 不是 Object 的函数。 (/Applications/MAMP/htdocs/transport/models/relations/zone_plzs.js:28:5)以上是关于在 sequelize 中关联两个表的主要内容,如果未能解决你的问题,请参考以下文章
使用自定义连接表主键 Sequelize BelongsToMany