Orm 如何用Sequelize models对象描述遗留表一对多连接?
我正在尝试使用遗留表,并坚持如何在Sequelize的模型中定义数据库的连接 我有以下表格: pesons:Orm 如何用Sequelize models对象描述遗留表一对多连接?,orm,sequelize.js,one-to-many,belongs-to,has-one,Orm,Sequelize.js,One To Many,Belongs To,Has One,我正在尝试使用遗留表,并坚持如何在Sequelize的模型中定义数据库的连接 我有以下表格: pesons: +----+---------+-------------+ | id | name | language_id | +----+---------+-------------+ | 1 | Anatoly | 1 | | 2 | Roman | 2 | | 3 | Pavel | 1 | +----+---
+----+---------+-------------+
| id | name | language_id |
+----+---------+-------------+
| 1 | Anatoly | 1 |
| 2 | Roman | 2 |
| 3 | Pavel | 1 |
+----+---------+-------------+
+----+---------+
| id | value |
+----+---------+
| 1 | English |
| 2 | Hebrew |
| 3 | Russian |
+----+---------+
及
语言:
+----+---------+-------------+
| id | name | language_id |
+----+---------+-------------+
| 1 | Anatoly | 1 |
| 2 | Roman | 2 |
| 3 | Pavel | 1 |
+----+---------+-------------+
+----+---------+
| id | value |
+----+---------+
| 1 | English |
| 2 | Hebrew |
| 3 | Russian |
+----+---------+
正如您所看到的,每个人
都可以知道一种语言
,但不同的人可以知道相同的语言
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
})
根据官方手册:
当源模型中存在关联信息时,我们可以
使用belongsTo
我需要将人
和语言
之间的关系定义为:
Person.belongsTo(Language);
但在我看来这是错误的,而且是违反直觉的,所以我想从某人那里得到一些澄清
另外,为了清楚起见,我以前从未使用过任何ORM。在通常情况下,每个人都可以知道多种语言,但不同的人可以知道相同的语言
所以有多对多的关联,所以我们做多对多的关联
但是对于您的用例,请将您的场景重新表述为
语言有很多人(用户),所以这里有一对多的关联,没有一部分有一个关联
属于和有许多必须成对使用,因为它们是相对的部分
所以首先
Language.hasMany(Person)
orm将向语言中添加所有必要的实例和类方法,以便您可以轻松地查询、添加和删除语言中的人员
第二部分
Person.belongsTo(Language)
orm将向Persons添加所有必需的实例和类方法,以便您可以方便地查询、添加和删除person的语言。因此,我需要语言.hasMany(person)
,和person.belongsTo(Language)
使其工作?是的,例如如果您不使用Language.hasMany(person)那么你就不能学习语言了