【发布时间】:2018-11-12 00:17:36
【问题描述】:
我有一个包含三个表的数据库:users、games 和 game_user。 users和games与game_user作为其连接表有多对多关系
game_user 表只有三列(id 除外):game_id、user_id 和 game_admin。
这个想法是user 可以是game 或admin 中的普通用户。例如,我会为前者存储值0,为后者存储1。
我不确定如何在 Adonis 中执行此操作。我已经阅读了文档,也许我应该创建一个pivotModel,但我不知道该怎么做(或者如果我应该这样做的话)。
我尝试了以下方法:
class GameUserSchema extends Schema {
up () {
this.create('game_user', (table) => {
table.increments()
table.integer('user_id').unsigned().index('user_id')
table.integer('game_id').unsigned().index('game_id')
table.integer('game_admin').unsigned().index('game_admin')
table.foreign('user_id').references('users.id')
.onDelete('cascade')
table.foreign('game_id').references('games.id')
.onDelete('cascade')
})
}
down () {
this.drop('game_user')
}
}
现在,当我添加游戏时,我通常使用以下代码:
const newGame = await Game.create(gameData)
await user.games().attach([newGame.id])
但这只会使用user_id 更新联结表,显然,不会使用用户的角色。
所以我的问题是:我的迁移文件是正确的还是有更好的方法?另外,创建游戏时如何更新联结表?
【问题讨论】:
-
数据透视表标签用于将行转换为列,而不是连接表的别名。一些 ORM 将联结表称为数据透视表,这让许多开发人员感到困惑。使用前请阅读标签说明。
-
好的,很抱歉,但我认为标签可以更新,或者创建一个新标签,因为“一些 ORM 将连接表称为数据透视表”。只是我的两分钱,但它没有改变问题(除了一些单词选择。感谢您的更正。
-
或者您可以要求您选择的 ORM 背后的人停止将联结表称为数据透视表...数据透视表标签定义很好,添加此引用会使用户感到困惑。在收到提示后,您设法为您的问题找到了正确的标签。
标签: javascript mysql many-to-many junction-table adonis.js