[英]Why does my sequelize query break with ER_BAD_FIELD_ERROR when eager loading a model associated to another with belongsTo/hasMany?
4.37.10
const Database = require('./database');
const Sequelize = require('sequelize');
const NationalChapters = require('./nationalchapters');
const LocalChapters = Database
.getInstance()
.define('localchapters', {
idLocalChapter: {
type: Sequelize.INTEGER(11),
primaryKey: true,
allowNull: false,
autoIncrement: true,
unique: true
},
LocalName: {
type: Sequelize.STRING(45),
allowNull: false
}
}, {
timestamps: false
});
LocalChapters.belongsTo(NationalChapters, { foreignKey: 'NationalChapter_id', onDelete: 'CASCADE' });
NationalChapters.hasMany(LocalChapters);
module.exports = LocalChapters;
const Database = require('./database');
const Sequelize = require('sequelize');
const NationalChapters = Database
.getInstance()
.define('nationalchapters', {
idNationalChapter: {
type: Sequelize.INTEGER(11),
primaryKey: true,
allowNull: false,
autoIncrement: true,
unique: true
},
NationalName: {
type: Sequelize.STRING(45),
allowNull: false,
unique: true
}
}, {
timestamps: false
});
module.exports = NationalChapters;
const result = await NationalChapters.findAll({
include: [ LocalChapters ]
});
[
{
idNationalChapter: 21,
NationalName: 'Some National Chapter Name',
localchapters: [
{
idLocalChapter: 15,
LocalName: 'Some Local Chapter Name'
},
...
]
}
...
]
DatabaseError [SequelizeDatabaseError]: Unknown column 'localchapters.nationalchapterIdNationalChapter' in 'field list'
at Query.formatError (/<file path>/node_modules/sequelize/lib/dialects/mysql/query.js:247:16)
at Query.handler [as onResult] (/<file path>/node_modules/sequelize/lib/dialects/mysql/query.js:68:23)
at Query.Command.execute (/<file path>/node_modules/mysql2/lib/commands/command.js:30:12)
at Connection.handlePacket (/<file path>/node_modules/mysql2/lib/connection.js:502:28)
at PacketParser.onPacket (/<file path>/node_modules/mysql2/lib/connection.js:81:16)
at PacketParser.executeStart (/<file path>/node_modules/mysql2/lib/packet_parser.js:77:14)
at Socket.<anonymous> (/<file path>/node_modules/mysql2/lib/connection.js:89:29)
at Socket.emit (events.js:210:5)
at addChunk (_stream_readable.js:308:12)
at readableAddChunk (_stream_readable.js:289:11)
at Socket.Readable.push (_stream_readable.js:223:10)
at TCP.onStreamRead (internal/stream_base_commons.js:182:23) {
name: 'SequelizeDatabaseError',
parent: Error: Unknown column 'localchapters.nationalchapterIdNationalChapter' in 'field list'
at Packet.asError (/<file path>/node_modules/mysql2/lib/packets/packet.js:716:13)
at Query.Command.execute (/<file path>/node_modules/mysql2/lib/commands/command.js:28:22)
at Connection.handlePacket (/<file path>/node_modules/mysql2/lib/connection.js:502:28)
at PacketParser.onPacket (/<file path>/node_modules/mysql2/lib/connection.js:81:16)
at PacketParser.executeStart (/<file path>/node_modules/mysql2/lib/packet_parser.js:77:14)
at Socket.<anonymous> (/<file path>/node_modules/mysql2/lib/connection.js:89:29)
at Socket.emit (events.js:210:5)
at addChunk (_stream_readable.js:308:12)
at readableAddChunk (_stream_readable.js:289:11)
at Socket.Readable.push (_stream_readable.js:223:10)
at TCP.onStreamRead (internal/stream_base_commons.js:182:23) {
code: 'ER_BAD_FIELD_ERROR',
errno: 1054,
sqlState: '42S22',
sqlMessage: "Unknown column 'localchapters.nationalchapterIdNationalChapter' in 'field list'",
sql: 'SELECT `nationalchapters`.`idNationalChapter`,
`nationalchapters`.`NationalName`,
`localchapters`.`idLocalChapter` AS `localchapters.idLocalChapter`,
`localchapters`.`LocalName` AS `localchapters.LocalName`,
`localchapters`.`NationalChapter_id` AS `localchapters.NationalChapter_id`,
`localchapters`.`nationalchapterIdNationalChapter` AS `localchapters.nationalchapterIdNationalChapter`
FROM `nationalchapters` AS `nationalchapters`
LEFT OUTER JOIN `localchapters` AS `localchapters`
ON `nationalchapters`.`idNationalChapter` = `localchapters`.`nationalchapterIdNationalChapter`;'
},
original: Error: Unknown column 'localchapters.nationalchapterIdNationalChapter' in 'field list'
at Packet.asError (/<file path>/node_modules/mysql2/lib/packets/packet.js:716:13)
at Query.Command.execute (/<file path>/node_modules/mysql2/lib/commands/command.js:28:22)
at Connection.handlePacket (/<file path>/node_modules/mysql2/lib/connection.js:502:28)
at PacketParser.onPacket (/<file path>/node_modules/mysql2/lib/connection.js:81:16)
at PacketParser.executeStart (/<file path>/node_modules/mysql2/lib/packet_parser.js:77:14)
at Socket.<anonymous> (/<file path>/node_modules/mysql2/lib/connection.js:89:29)
at Socket.emit (events.js:210:5)
at addChunk (_stream_readable.js:308:12)
at readableAddChunk (_stream_readable.js:289:11)
at Socket.Readable.push (_stream_readable.js:223:10)
at TCP.onStreamRead (internal/stream_base_commons.js:182:23) {
code: 'ER_BAD_FIELD_ERROR',
errno: 1054,
sqlState: '42S22',
sqlMessage: "Unknown column 'localchapters.nationalchapterIdNationalChapter' in 'field list'",
sql: 'SELECT `nationalchapters`.`idNationalChapter`,
`nationalchapters`.`NationalName`,
`localchapters`.`idLocalChapter` AS `localchapters.idLocalChapter`,
`localchapters`.`LocalName` AS `localchapters.LocalName`,
`localchapters`.`NationalChapter_id` AS `localchapters.NationalChapter_id`,
`localchapters`.`nationalchapterIdNationalChapter` AS `localchapters.nationalchapterIdNationalChapter`
FROM `nationalchapters` AS `nationalchapters`
LEFT OUTER JOIN `localchapters` AS `localchapters`
ON `nationalchapters`.`idNationalChapter` = `localchapters`.`nationalchapterIdNationalChapter`;'
},
sql: 'SELECT `nationalchapters`.`idNationalChapter`,
`nationalchapters`.`NationalName`,
`localchapters`.`idLocalChapter` AS `localchapters.idLocalChapter`,
`localchapters`.`LocalName` AS `localchapters.LocalName`,
`localchapters`.`NationalChapter_id` AS `localchapters.NationalChapter_id`,
`localchapters`.`nationalchapterIdNationalChapter` AS `localchapters.nationalchapterIdNationalChapter`
FROM `nationalchapters` AS `nationalchapters`
LEFT OUTER JOIN `localchapters` AS `localchapters`
ON `nationalchapters`.`idNationalChapter` = `localchapters`.`nationalchapterIdNationalChapter`;'
}
這似乎是一個基本的belongsTo/hasMany 關系,它產生了損壞的SQL,但我終其一生都無法弄清楚我哪里出錯了......有什么想法嗎?
編輯: - 修正了“查詢運行”部分中模型名稱的拼寫錯誤
解決
當創建一個自定義的外鍵模型之間的一個一對多的關聯,顯然你必須指定在這兩個外鍵的配置belongsTo
和hasMany
關聯像這樣(不只是其中之一):
LocalChapters.belongsTo(NationalChapters, { foreignKey: 'NationalChapter_id', onDelete: 'CASCADE' });
NationalChapters.hasMany(LocalChapters, { foreignKey: 'NationalChapter_id', onDelete: 'CASCADE' });
希望這可以幫助。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.