Mysql 使用Sequelize装置导入具有嵌套关联的数据
我正在尝试使用以下设置编写一个用于规范化地址数据的导入脚本:Mysql 使用Sequelize装置导入具有嵌套关联的数据,mysql,node.js,sequelize.js,Mysql,Node.js,Sequelize.js,我正在尝试使用以下设置编写一个用于规范化地址数据的导入脚本: const Address = sequelize.define('address', { ... }); const Cities = sequelize.define('cities', { ... }); const Regions = sequelize.define('regions', { ... }); Address.belongsTo(Cities, { foreignKey: 'cityId' });
const Address = sequelize.define('address', { ... });
const Cities = sequelize.define('cities', { ... });
const Regions = sequelize.define('regions', { ... });
Address.belongsTo(Cities, {
foreignKey: 'cityId'
});
Cities.belongsTo(Regions, {
foreignKey: 'regionId'
});
下面是我试图导入的数据示例:
地区导入数据:
╔═════════════╗
║ ID Region ║
╠═════════════╣
║ 1 England ║
╚═════════════╝
╔════════════╗
║ ID City ║
╠════════════╣
║ 1 London ║
╚════════════╝
╔═════════════════════════════════════════════════════════╗
║ ID Owner Address City Region ║
╠═════════════════════════════════════════════════════════╣
║ 1 Sherlock Holmes 221B Baker Street London England ║
╚═════════════════════════════════════════════════════════╝
城市导入数据:
╔═════════════╗
║ ID Region ║
╠═════════════╣
║ 1 England ║
╚═════════════╝
╔════════════╗
║ ID City ║
╠════════════╣
║ 1 London ║
╚════════════╝
╔═════════════════════════════════════════════════════════╗
║ ID Owner Address City Region ║
╠═════════════════════════════════════════════════════════╣
║ 1 Sherlock Holmes 221B Baker Street London England ║
╚═════════════════════════════════════════════════════════╝
地址导入数据:
╔═════════════╗
║ ID Region ║
╠═════════════╣
║ 1 England ║
╚═════════════╝
╔════════════╗
║ ID City ║
╠════════════╣
║ 1 London ║
╚════════════╝
╔═════════════════════════════════════════════════════════╗
║ ID Owner Address City Region ║
╠═════════════════════════════════════════════════════════╣
║ 1 Sherlock Holmes 221B Baker Street London England ║
╚═════════════════════════════════════════════════════════╝
首先,我导入区域数据,然后导入城市数据,并引用区域:
// regions.json
[
{
"model": "Regions",
"data": {
"label": "England"
}
}
]
// cities.json
[
{
"model": "Cities",
"data": {
"label": "London",
"region": {
"label": "England"
}
}
}
]
这非常有效,但是有没有一种方法可以在引用城市和地区数据的同时导入地址数据,以防止Holmes住在加利福尼亚州的伦敦?我尝试在城市内部嵌套区域数据:
// address.json
[
{
"model": "Address",
"data": {
"street_1": "221B Baker Street",
"city": {
"label": "London",
"region": {
"label": "England"
}
}
}
}
]
更新#1 我试着变得聪明,但没有用:
[
{
"model": "Address",
"data": {
"street_1": "221B Baker Street",
"cityId": {
"val": "SELECT c.id FROM cities c LEFT JOIN regions r ON c.regionId = r.id WHERE c.label = \"London\" AND r.label = \"England\""
}
}
}
]
我已经离开这个项目(已经两年了!),但最近我提交的更新提醒我,我收到了项目所有者的回复,这是我以前从未见过的。因此,为了解决这个问题并帮助将来可能遇到这个问题的任何人,以下是: 我以前从未遇到过这种情况。我认为目前唯一合适的解决方案是为城市指定ID并使用这些ID
我还没有验证解决方案,就像我说的,这是很久以前的事了,我不记得我正在做的项目,但请让我知道它是否适合你 我已经离开了这个项目(已经两年了!),但最近我提交的更新提醒我,我收到了项目负责人的回复,这是我以前从未见过的。因此,为了解决这个问题并帮助将来可能遇到这个问题的任何人,以下是: 我以前从未遇到过这种情况。我认为目前唯一合适的解决方案是为城市指定ID并使用这些ID 我还没有验证解决方案,就像我说的,这是很久以前的事了,我不记得我正在做的项目,但请让我知道它是否适合你