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

时间:2013-11-26 19:14:02

标签: javascript node.js postgresql sequelize.js

我正在使用SegreizeJS和PostgreSQL ..

我有一张桌子units。我想要一个包含unit_relationsunit1_idunit2_id列的表typeunit1_idunit2_id都应具有units.id的外键约束,以便每次删除单元时,unit_relations引用该单位的任何行(unit1 }或unit2)也会被删除。

在Sequelize中,我希望unit2映射到Relationunit1映射到ReverseRelation;例如行

          units                         unit_relations
------------+---------------   ----------+----------+-------
relation_id | reverce_rel_id    unit1_id | unit2_id |  type
------------+---------------   ----------+----------+--------
            |                         11 |       43 | parent 

将由unit1.getRelations()unit2.getReverseRelations()提取。

我很难让Sequelize尊重我的列名(它想使用relation_idreverse_relation_id)或创建外键。

1 个答案:

答案 0 :(得分:2)

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

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