Sequelize.js 외래 키
Sequelize.js를 사용할 때 다음 코드는 테이블에 외래 키를 추가하지 않습니다.
var MainDashboard = sequelize.define('main_dashboard', {
title: Sequelize.STRING
}, {
freezeTableName: true
})
MainClient.hasOne(MainDashboard, { foreignKey: 'idClient' })
MainDashboard.hasOne(MainClient, { foreignKey: 'clientId' })
sequelize.sync({ force: true })
Sequelize.js가 이러한 외래 키 제약 조건을 추가하도록 강제할 수 있는 방법이 있습니까?
동일한 문제가 발생하기 전에 Sequelize 설정의 기능을 이해했을 때 해결했습니다.
바로 본론으로!
두 개의 객체가 있다고 가정합니다.사람과 아버지
var Person = sequelize.define('Person', {
name: Sequelize.STRING
});
var Father = sequelize.define('Father', {
age: Sequelize.STRING,
//The magic start here
personId: {
type: Sequelize.INTEGER,
references: 'persons', // <<< Note, its table's name, not object name
referencesKey: 'id' // <<< Note, its a column name
}
});
Person.hasMany(Father); // Set one to many relationship
당신을 도울 수도 있습니다.
편집:
이 글을 읽고 더 잘 이해할 수 있습니다.
http://docs.sequelizejs.com/manual/tutorial/associations.html#foreign-keys
Sequelize 4의 경우 다음으로 업데이트되었습니다.
const Father = sequelize.define('Father', {
name: Sequelize.STRING
});
const Child = sequelize.define('Child', {
age: Sequelize.STRING,
fatherId: {
type: Sequelize.INTEGER,
references: {
model: 'fathers', // 'fathers' refers to table name
key: 'id', // 'id' refers to column name in fathers table
}
}
});
Father.hasMany(Child); // Set one to many relationship
편집: https://sequelize.org/master/manual/assocs.html 에서 연관성에 대해 더 자세히 읽을 수 있습니다.
추가할 필요가 있습니다.foreignKeyConstraint: true
시도:
MainClient.hasOne(MainDashboard, { foreignKey: 'idClient', foreignKeyConstraint: true })
코드를 실행하려고 했는데 행이 제대로 생성된 것 같습니다.
CREATE TABLE IF NOT EXISTS `main_dashboard` (`title` VARCHAR(255), `id` INTEGER NOT NULL auto_increment , `idClient` INTEGER, PRIMARY KEY (`id`)) ENGINE=InnoDB;
CREATE TABLE IF NOT EXISTS `main_client` (`id` INTEGER NOT NULL auto_increment, `clientId` INTEGER, PRIMARY KEY (`id`)) ENGINE=InnoDB;
clientId
에 추가됩니다.main_client
,그리고.idClient
에 추가됩니다.main_dashboard
당신은 약간 혼란스러워 하는 것 같습니다.hasOne
메소드가 합니다.전화할 때마다hasOne
코드가 두 개의 테이블을 효과적으로 두 번 연결하도록 연결됩니다.당신이 찾는 방법은belongsTo
각 클라이언트에 대시보드가 하나씩 있기를 원할 경우 코드는 다음과 같습니다.
MainClient.hasOne(MainDashboard, { foreignKey: 'clientId' })
MainDashboard.belongsTo(MainClient, { foreignKey: 'clientId' })
이렇게 하면 다음이 생성됩니다.clientId
현장에.main_dashboard
테이블, 에 관련된id
야전의main_client
테이블
요컨대belongsTo
메서드를 호출할 테이블에 관계를 추가합니다.hasOne
인수로 주어진 테이블에 추가합니다.
놀랍도록 간단합니다.
const MainDashboard = this.sequelize.define('main_dashboard', {/* attributes */}),
MainClient = this.sequelize.define('main_client', {/* attributes */});
MainDashboard.belongsTo(MainClient, { foreignKey: 'clientId' }); // Adds clientId to MainDashboard
이것을 외국 키로 연결할 것이고 당신은 그것을 연관으로 사용할 수 있습니다.제가 부족한 게 있으면 알려주세요.
언급URL : https://stackoverflow.com/questions/14169655/sequelize-js-foreign-key
'source' 카테고리의 다른 글
jQuery를 사용하여 요소의 모든 특성 가져오기 (0) | 2023.10.19 |
---|---|
mysql: /usr/local/lib/libssl.so .1.1: 'OPENSL_1_1_1' 버전을 찾을 수 없습니다(mysql로 required). (0) | 2023.10.19 |
레거시 API를 사용하여 MySQL 쿼리가 성공했는지 확인하는 방법은? (0) | 2023.10.19 |
조건이 null인 경우 기본값으로 행 추가 (0) | 2023.10.19 |
일반 자바스크립트 jQuery.param()과 동등한 jQuery.param() (0) | 2023.10.19 |