我想在model定义时使用references创建一个外连接,而不在DB生成表时创建外键约束。Sequelize文档中说用references,但是,我怎么在model中获取另一个model。 ctx.model.User这样写会报错,debug时,发现这时ctx.model是空的。如果用Person.associate这样的写法就会在同步数据库时创建外键约束了。请问我怎么解决这个问题。 module.exports = app => { const { STRING, INTEGER } = app.Sequelize; const Person = app.model.define('person', { id: { type: INTEGER, primaryKey: true, autoIncrement: true }, nikeName: { type: STRING, field: 'nikeName', }, userId: { type: INTEGER, references: { model: ctx.model.User, key: 'id', }, }, });
Q
[eggjs/egg]请教:如何创建没有约束的外连接
3
A
回答
5
这样写
Person.associate=function(){
Person.belongsTo(app.model.User, {
foreignKey: 'userId',
})
}
1
感谢回答,但是用Person.associate=function()这种写法就会在DB中创建外键约束了,我只想在代码上实现表的关联,不想创建DB中的外键约束。Sequelize文档在没有约束的情况下强制执行外键引用写的何以实现,不知道在egg里可以吗?
5
@onehuo 不调用
Person.sync()
就不会在DB中有外键约束了
3
你的意思是不调用sync()方法,DB中表要自己手创建,不是Sequelize自动同步创建,是吗?
5
@onehuo 是的,看了下文档 model Can be both a string representing the table name or a Sequelize model,可以这样写
userId: {
type: INTEGER,
references: {
model: 'user',
key: 'id',
},
},
但是试了下这个也会创建外键约束,只是不创建级联约束
6
谢谢回答,试了一下启动时不报错,但是还是在数据库中创建了外键约束。我先手动创建表吧,不用自动同步的方式了。
2
@onehuo 可以用migration创建表
1
对,只是想偷个懒,写一遍就自动创建最好。