Javascript objective.js中的多对多关系
我有一个项目,用户可以有很多平台。这些平台可以有许多密码。目前我有以下数据库结构: 我正在尝试使用即时加载来获取以下对象:Javascript objective.js中的多对多关系,javascript,node.js,orm,objection.js,Javascript,Node.js,Orm,Objection.js,我有一个项目,用户可以有很多平台。这些平台可以有许多密码。目前我有以下数据库结构: 我正在尝试使用即时加载来获取以下对象: { "id": 1, "username": "Keith", "platforms": [ { "id": 1, "name": "Jira", "passwords": [ { "id"
{
"id": 1,
"username": "Keith",
"platforms": [
{
"id": 1,
"name": "Jira",
"passwords": [
{
"id": 1,
"password": "hash"
},
{
"id": 2,
"password": "otherhash"
}
]
},
{
"id": 2,
"name": "Confluence",
"passwords": [
{
"id": 3,
"password": "anotherhash"
},
{
"id": 4,
"password": "anotherone"
}
]
}
]
}
我花了几个小时,弄不明白。如何定义关系以获得此结构?这可能吗?据我所知,如果不为该3路联接表创建自己的模型,就不可能做到这一点 所以模型看起来像这样:
class User extends objection.Model {
static get tableName() {
return 'user';
}
static get relationMappings() {
return {
platformPasswords: {
relation: Model.HasManyRelation,
modelClass: UserPlatformPassword,
join: {
from: 'user.id',
to: 'user_platform_password.user_id'
}
}
}
}
}
class Platform extends objection.Model {
static get tableName() {
return 'platform';
}
}
class Password extends objection.Model {
static get tableName() {
return 'password';
}
}
class UserPlatformPassword extends objection.Model {
static get tableName() {
return 'user_platform_password';
}
static get relationMappings() {
return {
password: {
relation: Model.HasOne,
modelClass: Password,
join: {
from: 'user_platform_password.password_id',
to: 'password.id'
}
},
platform: {
relation: Model.HasOne,
modelClass: Platform,
join: {
from: 'user_platform_password.platform_id',
to: 'platform.id'
}
}
}
}
}
也许还有其他一些方法可以对这些关系进行建模,至少在进行急切选择时是有效的,但我很难理解,如果您想插入/插入嵌套数据,其中多个关系处理同一联接表的不同字段,该方法如何工作。谢谢!我所寻找的确实是不可能的。我最终将数据库结构更改为以下结构:。现在快速加载更容易了,但我觉得数据库更难读取。。。因此,我想知道实现这种多对多关系的最佳方式/实践是什么,可能是使用两个单独的联接表,一个用于平台,用于连接用户和平台,另一个用于连接用户和平台的密码,密码和平台具有设置了用户id和平台id的复合密钥,或者对于postgresql,您还可以在JSONB列中存储密码列表,作为联接表中的额外字段。这是在最后一个例子的评论中提到的哇,我不知道最后一个功能。非常感谢你