我正在尝试使用Sequelize Fixtures为标准化地址数据编写导入脚本,并进行以下设置:
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 ║
╚═════════════════════════════════════════════════════════╝
首先,我导入区域数据,然后导入城市数据并引用该区域:
// regions.json
[
{
"model": "Regions",
"data": {
"label": "England"
}
}
]
// cities.json
[
{
"model": "Cities",
"data": {
"label": "London",
"region": {
"label": "England"
}
}
}
]
这很有效,但是有一种方法可以在引用两者城市和区域数据时导入地址数据,以防止Holmes居住在伦敦ON, CA?我已经尝试在城市内嵌套区域数据:
// address.json
[
{
"model": "Address",
"data": {
"street_1": "221B Baker Street",
"city": {
"label": "London",
"region": {
"label": "England"
}
}
}
}
]
我试图变得聪明并使用Sequelize.literal
无效:
[
{
"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\""
}
}
}
]
答案 0 :(得分:0)
此后,我已经离开了这个项目(已经2年了!),但是我提交的Github issue的最新更新使我想起了我从未见过的来自项目所有者的回复。因此,为了解决这个问题并为以后可能会遇到此问题的任何人提供帮助,请访问the answer:
以前没有遇到过。我认为目前唯一可行的解决方案是为城市指定ID,并使用这些ID
我尚未验证该解决方案,因为就像我说的那样,它是很久以前的,并且不记得我正在从事的项目,但是请告诉我它是否对您有用!