丰富与PostgreSQL的
问题描述:
我使用SequelizeJS PostgreSQL的..丰富与PostgreSQL的
我有一个表units
在Sequelize外键约束,自我关联。我想要一个表unit_relations
与列unit1_id
,unit2_id
,type
。 unit1_id
和unit2_id
都应该有外键约束到units.id
,这样任何时候单元被删除时,引用该单元的任何行(如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
和伸展相关字段
UnitRel.find({
where: {id: 1},
include:[
{model: Unit, as: 'Uid_1'},
{model: Unit, as: 'Uid_2'}
]
}).success(function(match) {
console.log(JSON.stringify);
});
我的问题的外键部分也是发现在http://stackoverflow.com/questions/19686144/how-to-enforce-foreign-key-constraints-in-a-self-referencing-association?rq=1,虽然这不涉及列命名 –
'关系'和'R everseRelation'在**单位**表格中? – khex
Юрий,чтовыподразумеваетеподфразой'尊重我的专栏名称' - **уважатьназваниемоихколонок**? – khex