我正在尝试将 Sequelize 与旧表一起使用,并坚持如何在 Sequelize 的模型中定义数据库的一对多连接。
我有以下表格:
比松:
+----+---------+-------------+
| id | name | language_id |
+----+---------+-------------+
| 1 | Anatoly | 1 |
| 2 | Roman | 2 |
| 3 | Pavel | 1 |
+----+---------+-------------+
和
语言:
+----+---------+
| id | value |
+----+---------+
| 1 | English |
| 2 | Hebrew |
| 3 | Russian |
+----+---------+
就像你所看到的,每个Person
都可以知道一个Language
但同一个Language
可以被不同的Persons
知道。
var Person = sequelize.define('person', {
id : {
field: 'id',
type: Sequelize.INTEGER,
primaryKey: true,
autoIncrement: true
},
name : {
field: 'name',
type: Sequelize.TEXT
}
},{
tableName: 'persons',
timestamps: false
});
var Language = sequelize.define('language', {
id : {
field: 'id',
type: Sequelize.INTEGER,
primaryKey: true,
autoIncrement: true
},
value : {
field: 'value',
type: Sequelize.TEXT
}
},{
tableName: 'languages',
timestamps: false
})
根据官方手册:HasOne和BelongsTo之间的区别
当源模型中存在有关关联的信息时,我们可以 使用属于。
我需要将Person
和Language
之间的关系定义为:
Person.belongsTo(Language);
但这对我来说看起来不对,违反直觉,所以我想从某人那里得到一些澄清。
附言为了清楚起见,我以前从未使用过任何ORM。
在通常情况下,每个人都可以知道多种语言,但不同的人可以知道相同的语言
所以有多对多的关联,所以我们做多对多的关联http://docs.sequelizejs.com/en/latest/docs/associations/#nm
但对于您的用例,请将您的气味改写为
语言有很多人(用户(,所以这里有一个对多的关联,没有一个部分有一个关联。
属于并且有很多必须成对使用,因为它们是对应部件
所以首先
Language.hasMany(Person)
orm 会将所有基本的实例和类方法添加到语言中,以便您可以轻松地在语言中添加、添加和删除人员。
第二部分
Person.belongsTo(Language)
orm 会将所有基本实例和类方法添加到人员中,以便您可以轻松地查询、添加和删除人员的语言。