我正在使用续集为项目构建数据库结构。我为该项目创建了friends表。是否可以使用sequelize将用户外键设置为朋友数据库表中的两个不同字段(Friender,Friended)。我知道我可以使用Friend.hasOne(User) User.hasMany(Friend)
创建外键,但这只是将一个字段分配为外键。我想拥有两个与两个不同字段具有相同模型的外键。
到目前为止,这是我的续集数据库模型(朋友):
const seq = require('sequelize');
const database = require('../index');
const Friend = database.define(
"friend",
{
id:{
type:seq.INTEGER,
primaryKey:true,
autoIncrement:true
},
favorite:{
type:seq.STRING,
null:true,
validate:{
isUrl: true,
}
},
},{
createdAt: Sequelize.DATE,
updatedAt: Sequelize.DATE,
},
database.sync()
.then(() => {
console.log("Profile table is synced")
})
.catch((error) => {
console.log("caught error with Profile: " + error)
})
);
Friend.hasOne(User)
User.hasMany(Friends)
我希望Friend.friender
是User
的外键
我希望Friend.friended
也是User
的前身钥匙
不确定如何执行此操作...
答案 0 :(得分:0)
为什么不使用Friend和User模型之间的多对多关系,而允许通过自定义关系模型选择它们之间的关系类型?
https://docs.djangoproject.com/en/2.2/ref/models/fields/#django.db.models.ManyToManyField.through
答案 1 :(得分:0)
通过数据透视表称为多对多关系。
添加一些用于建模的字段,并通过该字段定义多对多关系:
const seq = require('sequelize');
const database = require('../index');
const Friend = database.define(
"friends",
{
id:{
type:seq.INTEGER,
primaryKey:true,
autoIncrement:true
},
userId: {
type: seq.INTEGER,
},
friendUserId: {
type: seq.INTEGER,
},
favorite:{
type:seq.STRING,
null:true,
validate:{
isUrl: true,
}
},
},{
createdAt: Sequelize.DATE,
updatedAt: Sequelize.DATE,
}
);
User.hasMany(
User,
{
as: 'friends',
through: Friend,
foreignKey: 'friendUserId'
}
);