[eggjs/egg]请教:如何创建没有约束的外连接

2024-07-22 177 views
3

我想在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', }, }, });

回答

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自动同步创建,是吗?

6

谢谢回答,试了一下启动时不报错,但是还是在数据库中创建了外键约束。我先手动创建表吧,不用自动同步的方式了。

2

@onehuo 可以用migration创建表

1

对,只是想偷个懒,写一遍就自动创建最好。