如何描述旧表与 Sequelize 模型对象的一对多连接



我正在尝试将 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之间的区别

当源模型中存在有关关联的信息时,我们可以 使用属于。

我需要将PersonLanguage之间的关系定义为:

Person.belongsTo(Language);

但这对我来说看起来不对,违反直觉,所以我想从某人那里得到一些澄清。

附言为了清楚起见,我以前从未使用过任何ORM。

在通常情况下,每个人都可以知道多种语言,但不同的人可以知道相同的语言

所以有多对多

的关联,所以我们做多对多的关联http://docs.sequelizejs.com/en/latest/docs/associations/#nm

但对于您的用例,请将您的气味改写为

语言有很多人(用户(,所以这里有一个对多的关联,没有一个部分有一个关联。

属于并且有很多必须成对使用,因为它们是对应部件

所以首先

Language.hasMany(Person)

orm 会将所有基本的实例和类方法添加到语言中,以便您可以轻松地在语言中添加、添加和删除人员。

第二部分

Person.belongsTo(Language) 

orm 会将所有基本实例和类方法添加到人员中,以便您可以轻松地查询、添加和删除人员的语言。

最新更新