与PostgreSQL的Sequelize中的外键约束丰富的自联想
我在PostgreSQL中使用SequelizeJS ..
我有一个桌子units
。 我想要一个表unit_relations
与列unit1_id
, unit2_id
, type
。 unit1_id
和unit2_id
都应该具有对units.id
外键约束,以便任何时候单元被删除时,引用该单元的unit_relations
任何行(作为unit1
或unit2
)也将被删除。
在Sequelize中,我想将unit2映射到Relation
,将unit1
映射到ReverseRelation
; 例如行
单位unit_relations ------------ + --------------- ---------- + ---------- + ------- relation_id | reverce_rel_id unit1_id | unit2_id | types ------------ + --------------- ---------- + ---------- + -------- | 11 | 43 | 亲
将由unit1.getRelations()
和unit2.getReverseRelations()
。
我很难得到Sequelize尊重我的列名称(它想要使用relation_id
和reverse_relation_id
)或创build外键。
我仍然不完全理解表之间的所有关系。 试着用简单的例子来描述它,而不是抽象的概念。 喜欢
//Mary Had A Little Lamb Marry.hasOne(Lamp)
但从我的理解,你可以这样做:
var Sequelize = require('sequelize'); var sequelize = new Sequelize(.... { // your pg db settinds }); var Unit = sequelize.define('Unit', {}); var UnitRel = sequelize.define('UnitRel', { type: Sequelize.STRING }); // Create in Unit table columns 'relation_id' and 'rev_rel_id' UnitRel.hasOne(Unit, {foreignKey: 'relation_id', as: 'Relation'}); UnitRel.hasOne(Unit, {foreignKey: 'rev_rel_id', as: 'RevRelation'}); // Create in UnitRel table columns 'unit1_id' and 'unit2_id' UnitRel.belongsTo(Unit, {foreignKey: 'unit1_id', as: 'Unid_1'}); UnitRel.belongsTo(Unit, {foreignKey: 'unit2_id', as: 'Unid_2'}); Unit.sync({force: true}).success(function() { UnitRel.sync({force: true}).success(function() { console.log('TABLES CREATED'); }); });
然后find一些UnitRel
和拉伸依赖字段
UnitRel.find({ where: {id: 1}, include:[ {model: Unit, as: 'Uid_1'}, {model: Unit, as: 'Uid_2'} ] }).success(function(match) { console.log(JSON.stringify); });