我正在尝试使用sequelize在sqlite中建立表之间的多对多关系。 我想将记录添加到连接表(将任务分配给用户)并从该表中检索数据。出于某种原因,这不起作用。这是我的代码:
var orm = new Sequelize('db_name', '', '', {
dialect: 'sqlite',
storage: path.join(__dirname, 'db_name')
});
var User = orm.define('User', {
username: {type: Sequelize.STRING, unique: true}
});
var Task = orm.define('Task', {
id: {type: Sequelize.STRING, unique: true},
taskName: Sequelize.STRING
});
Task.hasMany(User);
User.hasMany(Task);
Task.sync();
User.sync();
阅读文档(http://sequelize.readthedocs.org/en/latest/api/associations/#hasmanytarget-options)后,我希望应该创建一个连接表TasksUsers。我也期望.addTask方法可用。然后在另一个文件中:
db.User.findOrCreate({where:{username: "fakeUser"}}); //this seems to work
//some code to populate "Tasks" table;
db.User.find({where: {username: "fakeUser"}}).
complete(function(err,user){
console.log("user", user); //the user is found
db.Task.find({where: {id: "some_value"}}).
complete(function(err, task) {
console.log("task", task); //the task is found, so it works up to this point
user.addTask(task). //this line does not work
complete(function(err, results){
console.log("posting error", err);
});
})
});
我收到错误"可能未处理SequelizeDatabaseError:错误:SQLITE_ERROR:没有这样的表:TasksUsers"。 user.getTasks()方法(括号中没有任何参数)由于同样的原因不起作用。
另一个观察结果:出于测试目的,我在建立hasMany关系后添加了这些代码行:
orm.query("SELECT name FROM sqlite_master WHERE type = 'table'").success(function (res) {
console.log("tables", res);
})
我得到的结果是表格['任务','用户' ]
版本:sequelize 2.0.0-rc2,sqlite3 3.0.4。我会非常感谢任何帮助。