我在用SequelizeJS和PostgreSQL。。
我有一张桌子。我想要一个带有列unitsunit_relationsunit1_id的表。unit2_idtype都应该有外键限制unit1_id,这样每当删除一个单元时,引用该单元的任何unit2_id行(如units.idunit_relations)也会被删除。
在sequentize中,我希望unit1映射到unit2并且unit2映射到Relation;例如,行
单位单位关系
------------+--------------- ----------+----------+-------
关系|关系|关系|单位1 |单位2 |单位id |类型
------------+--------------- ----------+----------+--------
|11 | 43 |父母
将由unit1ReverseRelation获取。
我很难让sequentize尊重我的列名(它想使用unit1.getRelations()unit2.getReverseRelations())或创建外键。

最佳答案

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

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

09-25 17:04