gpt4 book ai didi

node.js - NodeJs + Sequelize + Express 查询时添加的额外关联键

转载 作者:行者123 更新时间:2023-12-03 22:36:55 24 4
gpt4 key购买 nike

我有 2 个表:国家和地点。一个国家可以有多个景点,一个景点属于一个国家。

我已经为 2 个表生成了 sequelize 所需的迁移:

国家.js

'use strict';
module.exports = {
up: (queryInterface, Sequelize) => {
return queryInterface.createTable('Countries', {
id: {
allowNull: false,
autoIncrement: true,
primaryKey: true,
type: Sequelize.INTEGER
},
name: {
allowNull: false,
unique: true,
type: Sequelize.STRING
},
createdAt: {
allowNull: false,
defaultValue: Sequelize.literal('NOW()'),
type: Sequelize.DATE,
},
updatedAt: {
allowNull: false,
defaultValue: Sequelize.literal('NOW()'),
type: Sequelize.DATE
}
});
},
down: (queryInterface, Sequelize) => {
return queryInterface.dropTable('Countries');
}
};

Spots.js
'use strict';
module.exports = {
up: (queryInterface, Sequelize) => {
return queryInterface.createTable('Spots', {
id: {
allowNull: false,
autoIncrement: true,
primaryKey: true,
type: Sequelize.INTEGER
},
name: {
allowNull: false,
type: Sequelize.STRING
},
wind: {
type: Sequelize.FLOAT
},
country_id: {
type: Sequelize.INTEGER,
references: {
model: 'Countries', // name of Target table
key: 'id', // key in Target table that we're referencing
},
onDelete: 'CASCADE',
},
createdAt: {
allowNull: false,
defaultValue: Sequelize.literal('NOW()'),
type: Sequelize.DATE
},
updatedAt: {
allowNull: false,
defaultValue: Sequelize.literal('NOW()'),
type: Sequelize.DATE
}
});
},
down: (queryInterface, Sequelize) => {
return queryInterface.dropTable('Spots');
}
};

一切正常。我定义了一些路由和一些 Controller ,并尝试在我的 Controller 中执行 Spots.findAll()
const models = require('../models/index')
const Spot = models.Spot

exports.index = async (req, res, next) => {
const spots = await Spot.findAll()

res.status(200).json(spots)
}

然而,查询 Spot.findAll() 试图询问 CountryId,这是一个显然不存在的键,我不希望它存在。
Executing (default): SELECT `id`, `name`, `wind`, `country_id`, `createdAt`, `updatedAt`, `CountryId` FROM `Spots` AS `Spot`;
(node:13027) UnhandledPromiseRejectionWarning: SequelizeDatabaseError: Unknown column 'CountryId' in 'field list'

这些是现货和国家型号:

国家.js
'use strict';
module.exports = (sequelize, DataTypes) => {
const Country = sequelize.define('Country', {
name: DataTypes.STRING
}, {});
Country.associate = function(models) {
// associations can be defined here
Country.hasMany(models.Spot)
};
return Country;
};

现货.js
'use strict';
module.exports = (sequelize, DataTypes) => {
const Spot = sequelize.define('Spot', {
name: DataTypes.STRING,
wind: DataTypes.FLOAT,
country_id: DataTypes.INTEGER
}, {});
Spot.associate = function(models) {
// associations can be defined here
Spot.belongsTo(models.Country, {
foreignKey: 'country_id'
});
Spot.hasMany(models.Favorite)
};
return Spot;
};

我将foreign_key 属性添加到belongs_to 因为我认为错误肯定来自关联(我仍然认为它确实如此)。

为什么会发生以及如何解决?

最佳答案

问题是因为您在这里混合了所有内容,请遵循一种约定,camelCase 或snack_case。

country_id 写为 countryId 并将您的表名更改为小写,您就可以开始了。

关于node.js - NodeJs + Sequelize + Express 查询时添加的额外关联键,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58247303/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com