【问题标题】:Objection.js - Realtion with pivot tableObjection.js - 与数据透视表的关系
【发布时间】:2021-01-19 05:29:23
【问题描述】:
我很难理解我应该如何在 objections.js 中建模多对多关系。
基本上我有一个包含用户、游戏和用户分数表的应用程序。账号可以在游戏中得分。
表格是这样的:
用户表
游戏桌
用户评分表
如何创建关系?
我想向登录的用户显示所有游戏的列表
如果他在比赛中有得分,那么他的得分
谢谢!!
【问题讨论】:
标签:
javascript
node.js
express
knex.js
objection.js
【解决方案1】:
这与异议文档中Join table extra properties 中概述的要求基本相同。您可以调整它以创建 users、games 和 users_games 表。那么您的User 模型可能如下所示:
class User extends Model {
static get relationMappings() {
return {
relation: Model.ManyToManyRelation,
modelClass: Game,
join: {
from: 'users.id',
through: {
from: 'users_games.user_id',
to: 'users_games.game_id',
extra: ['score']
},
to: 'game.id'
}
};
}
}
在这里您可以看到我们在users_games 连接表中添加了一个额外的score 列。然后我想你会得到一个游戏列表,比如:
const user = await User.query().findOne({ username: 'wombatsarefluffy' });
const games = await user.$relatedQuery('games');
有关如何构建迁移的示例,请参阅文档页面。