gpt4 book ai didi

node.js - 尝试创建 HABTM 连接 Sequelize.js

转载 作者:行者123 更新时间:2023-12-03 22:42:52 30 4
gpt4 key购买 nike

我正在尝试与 Sequelize 创建 HABTM 关系,但我无法完成......我仍然收到一条错误消息:

    return (tableName1.toLowerCase() < tableName2.toLowerCase()) ? (tableName1
^
TypeError: Cannot call method 'toLowerCase' of undefined

我有一个 User 模型、一个 Book 模型和一个 UserBooks 模型。当然,我的数据库包含一个“users”表、“user_books”表和“books”表。

用户书模型:
module.exports = function(schema, DataTypes) {
var UserBooks = schema.define('UserBooks', {
}, {
tableName: 'user_books', // this will define the table's name
timestamps: false // this will deactivate the timestamp columns
});

UserBooks.sync();
return UserBooks;
};

用户模型:
module.exports = function(schema, DataTypes) {
var User = schema.define('User', {
keywords: DataTypes.STRING
}, {
tableName: 'users', // this will define the table's name
timestamps: false ,// this will deactivate the timestamp columns
syncOnAssociation:false
});

User.hasMany(Book, { foreignKey: 'user_id', through: UserBooks });

User.sync();

return User;
};

书籍型号:
module.exports = function(schema, DataTypes) {
var Book = schema.define('Book', {
keywords: DataTypes.STRING
}, {
tableName: 'books', // this will define the table's name
timestamps: false ,// this will deactivate the timestamp columns
syncOnAssociation:false
});

Book.hasMany(User, { foreignKey: 'book_id', through: UserBooks });

Book.sync();

return Book;
};

最佳答案

在您的 User 模型中,您尝试与未在该范围内定义的模型创建关联。在 User.js 中,您只能访问 User,而不能访问未定义的 Book 或 UserBooks。这就是导致您错误的原因。

您可以在将所有模型导入应用程序的位置创建关联,也可以通过导入要关联的模型(避免循环导入)在模型文件中创建关联。您的用户模型可以更改为:

module.exports = function(schema, DataTypes) {
var Book = schema.import(__dirname + '/book');
var UserBooks = schema.import(__dirname + '/userbooks');
var User = schema.define('User', {
keywords: DataTypes.STRING
}, {
tableName: 'users', // this will define the table's name
timestamps: false ,// this will deactivate the timestamp columns
syncOnAssociation:false
});

User.hasMany(Book, { foreignKey: 'user_id', through: UserBooks });
Book.hasMany(User, { foreignKey: 'book_id', through: UserBooks });

return User;
};

有关如何执行此操作的另一个示例,请参阅 http://sequelizejs.com/articles/express#minimal-express-app

此外,我已从您的代码中删除了对 User.sync 的调用。同步是异步调用,而导入是同步。这意味着您正在定义模型,开始将其同步到数据库,然后在您知道它已完成同步之前返回它。这意味着您可能会在创建表之前尝试使用它创建实例。相反,您应该使用 sequelize.sync 一次同步所有模型,并附加一个回调以等待同步完成(请参阅我发布的代码示例链接)

关于node.js - 尝试创建 HABTM 连接 Sequelize.js,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23559178/

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