And*_*eas 1 postgresql node.js express sequelize.js
我正在尝试使用 Sequelize 和 Postgresql 将带有外键约束的 user_id 列添加到 Node Express 中的 Todo 表。我收到一条错误消息,指出“未处理的拒绝 SequelizeDatabaseError:列“UserId”不存在”。如您所见,SELECT 查询中同时包含“userId”和“UserId”。

SELECT 查询是由一个简单的 Todo.findAll() 构建的。我认为我在迁移文件 20161116202040-add-user-id-to-todos.js 中创建外键约束的方式有问题
module.exports = {
up: function (queryInterface, Sequelize) {
return queryInterface.addColumn(
'Todos',
'userId', {
type: Sequelize.INTEGER,
references: {
model: 'Users',
key: 'id'}})},
Run Code Online (Sandbox Code Playgroud)
models/user.js 看起来像这样:
module.exports = function(sequelize, DataTypes) {
var User = sequelize.define('User', {
email: DataTypes.STRING,
password: DataTypes.STRING
}, {
classMethods: {
associate: function(models) {
User.hasMany(models.Todo);}}});
return User;};
Run Code Online (Sandbox Code Playgroud)
模型/todo.js 看起来像这样:
module.exports = function(sequelize, DataTypes) {
var Todo = sequelize.define('Todo', {
name: DataTypes.STRING,
userId: DataTypes.INTEGER
},{
classMethods: {
associate: function(models) {
Todo.belongsTo(models.User); }}});
return Todo;};
Run Code Online (Sandbox Code Playgroud)
Sequelize 有一种通过模型名称关联相关模型的方法。
所以例如
var User = sequelize.define('user', { ... });
var Todo = sequelize.define('todo', { ... });
Todo.belongsTo(User);
// Will create/use `userId` in Todo table
Run Code Online (Sandbox Code Playgroud)
但是在您将表名作为大写的情况下:
var User = sequelize.define('User', { ... });
var Todo = sequelize.define('Todo', { ... });
Todo.belongsTo(User);
// Will create/use `UserId` in Todo table
Run Code Online (Sandbox Code Playgroud)
所以你的情况,你可以重命名userId到UserId或明确指定的外键像
Todo.belongsTo(models.User, { foreignKey: "userId" });
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
5027 次 |
| 最近记录: |