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

标签 javascript node.js postgresql sequelize.js

我正在将 SequelizeJS 与 PostgreSQL 结合使用..

我有一个表单位。我想要一个包含 unit1_idunit2_idtype 列的表 unit_relationsunit1_idunit2_id 都应具有对 units.id 的外键约束,以便每次删除单元时,unit_relations 的任何行 引用该单元(例如 unit1unit2)也会被删除。

在 Sequelize 中,我希望将 unit2 映射到 Relation,并将 unit1 映射到 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)或创建外键。

最佳答案

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

//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并拉伸(stretch)相关字段

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

关于javascript - Sequelize with PostgreSQL 中与外键约束的丰富自关联,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20225965/

相关文章:

node.js - 蒙戈错误: connection timed out

linux - 为什么 npm 不安装任何包?

sql - 尝试使用 SQL 中的 any 从其他表中获取值

postgresql - 自动化数据库连接

javascript - 如何更改构造函数的一个属性而不影响其他属性?

javascript - fadeIn li 一一

javascript - jQuery 中的多个输入 ID 以更改父级中的一个跨度

node.js - 如何使用 Angular 6 运行较旧的 Angular 项目

sql - 如何为两个字段值选择相等数量的行?

JavaScript 调用对象语法