2017-03-26 7 views
0

Sequelize을 레거시 테이블과 함께 사용하려고하고 Sequelize` 모델에서 내 데이터베이스의 연결을 one-to-many 연결로 정의하는 방법을 고집했습니다. Sequelize 모델 객체와의 레거시 테이블 일대 다 연결을 설명하는 방법은 무엇입니까?

I가 다음과 같은 테이블 :

pesons :

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

언어 :

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

당신이 볼 수있는 것처럼, 모든 PersonLanguage을 알 수 있지만 동일한 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 
}) 

:

연결에 대한 정보는 우리가 할 수있는 사용 belongsTo를 소스 모델에 존재 Difference between HasOne and BelongsTo.

나는대로 PersonLanguage 사이의 관계를 정의해야

Person.belongsTo(Language); 

그러나 그것은 저와 직관적 인 카운터 잘못 보이는, 그래서 누군가로부터 어떤 설명을 좀하고 싶습니다.

P. 명확하게하기 위해, 나는 전에 어떤 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()를 할 수 없을 것입니다. –

관련 문제