Javascript Sequelize with PostgreSQL中外键约束的丰富自关联
我将SequelizeJS与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
单位
。我想要一个带有列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
。