我在用SequelizeJS和PostgreSQL。。
我有一张桌子。我想要一个带有列units
,unit_relations
,unit1_id
的表。unit2_id
和type
都应该有外键限制unit1_id
,这样每当删除一个单元时,引用该单元的任何unit2_id
行(如units.id
或unit_relations
)也会被删除。
在sequentize中,我希望unit1
映射到unit2
并且unit2
映射到Relation
;例如,行
单位单位关系
------------+--------------- ----------+----------+-------
关系|关系|关系|单位1 |单位2 |单位id |类型
------------+--------------- ----------+----------+--------
|11 | 43 |父母
将由unit1
和ReverseRelation
获取。
我很难让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);
});