2017-03-26 50 views
0

我試圖在舊錶上使用Sequelize,並堅持如何在Sequelize的模型中定義我的數據庫的one-to-many連接。如何使用Sequelize模型對象描述遺留表格一對多連接?

我有以下表格:

pesons

+----+---------+-------------+ 
| id | name | language_id | 
+----+---------+-------------+ 
| 1 | Anatoly |   1 | 
| 2 | Roman |   2 | 
| 3 | Pavel |   1 | 
+----+---------+-------------+ 

語言

+----+---------+ 
| id | value | 
+----+---------+ 
| 1 | English | 
| 2 | Hebrew | 
| 3 | Russian | 
+----+---------+ 

就像你所看到的,每Person可以知道一個Language,但可以通過不同的Persons知道相同的Language

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 
}) 

據官方手冊:Difference between HasOne and BelongsTo

當有關的關聯信息出現在源模型中,我們可以使用 屬於關聯。

我需要PersonLanguage之間的關係定義爲:

Person.belongsTo(Language); 

但它看起來錯了,我和直覺,所以我想獲得一些澄清,從別人。

P.S.爲了清楚起見,我從未使用過任何ORM。

回答

1

在通常情況下,這將是每個人都可以知道很多語言,但相同的語言可以由不同的人

被稱爲所以多對多關聯,所以我們做多對多關聯 http://docs.sequelizejs.com/en/latest/docs/associations/#nm

但爲您的用例請您重溫一下你的風格

語言有很多人(用戶),所以這裏出現一對多關聯,沒有一部分有一個關聯。

屬於,有許多必須成對使用,因爲它們是零件計數器

所以第一

Language.hasMany(Person) 

的ORM將增加所有必需的實例和類方法的語言,這樣就可以輕鬆查詢,添加和刪除一個人的語言。

第二部分

Person.belongsTo(Language) 

的ORM將增加所有必需的實例和類方法的人,這樣你可以很容易地查詢,添加和刪除語言的人。

+0

因此,我需要'Language.hasMany(Person)'和'Person.belongsTo(Language)'來使它工作嗎? – Anatoly

+0

是的,例如,如果你不做Language.hasMany(Person),那麼你將無法做到language.getPersons() –