我正在将 SequelizeJS 与 PostgreSQL 结合使用..
我有一个表单位
。我想要一个包含 unit1_id
、unit2_id
、type
列的表 unit_relations
。 unit1_id
和 unit2_id
都应具有对 units.id
的外键约束,以便每次删除单元时,unit_relations 的任何行
引用该单元(例如 unit1
或 unit2
)也会被删除。
在 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_id
和 reverse_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/