Javascript Sequelize with PostgreSQL中外键约束的丰富自关联

Javascript Sequelize with PostgreSQL中外键约束的丰富自关联,javascript,node.js,postgresql,sequelize.js,Javascript,Node.js,Postgresql,Sequelize.js,我将SequelizeJS与PostgreSQL一起使用 我有一个表单位。我想要一个带有列unit1\u id,unit2\u id,type的表unit\u relations。unit1\u id和unit2\u id都应该对units.id具有外键约束,以便在删除单元时,引用该单元的任何unit\u关系行(如unit1或unit2)也会被删除 在Sequelize中,我希望unit2映射到Relation,unit1映射到ReverseRelation;e、 g.争吵 units

我将SequelizeJS与PostgreSQL一起使用

我有一个表
单位
。我想要一个带有列
unit1\u id
unit2\u id
type
的表
unit\u relations
unit1\u id
unit2\u id
都应该对
units.id
具有外键约束,以便在删除单元时,引用该单元的任何
unit\u关系行(如
unit1
unit2
)也会被删除


在Sequelize中,我希望
unit2
映射到
Relation
unit1
映射到
ReverseRelation
;e、 g.争吵

units unit_relations ------------+--------------- ----------+----------+------- relation_id | reverce_rel_id unit1_id | unit2_id | type ------------+--------------- ----------+----------+-------- | 11 | 43 | parent 单位关系 ------------+--------------- ----------+----------+------- 关系号|回响号|相对号|单位1 |单位号|单位2 |单位号|类型 ------------+--------------- ----------+----------+-------- |11 | 43 |家长 将由
unit1.getRelations()
unit2.getReversions()
获取


我很难让Sequelize尊重我的列名(它想使用
关系id
反向关系id
)或创建外键。

我仍然不完全理解表之间的所有关系。试着用简单的例子而不是抽象的概念来描述它。像

//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');
    });
});
然后找到一些
UnitRel
和拉伸相关字段

UnitRel.find({
  where: {id: 1}, 
    include:[
      {model: Unit, as: 'Uid_1'},
      {model: Unit, as: 'Uid_2'}
    ]
}).success(function(match) {
   console.log(JSON.stringify);
});

我问题的外键部分也可以在中找到,尽管它不涉及单位表中的列命名
关系
反向关联
,尊重我的列名
-是的,它们都引用了单位表中的内容。当我说“尊重我的列名”时,我的意思是我希望
unit\u relations
中的列被命名为
unit1\u id
unit2\u id
;当Sequelize生成列时,它调用它们
relationshid\u id
reverse\u relationshid\u id