如何使用adonis中的用户角色更新连接表

gkn4icbw  于 2021-06-20  发布在  Mysql
关注(0)|答案(1)|浏览(326)

我有一个包含三个表的数据库: users , games 以及 game_user . users 以及 games 与…有多对多的关系 game_user 作为它的连接表
table game_user 只有三列(除 id ): game_id , user_id 以及 game_admin .
我们的想法是 user 可以是 game ,或 admin . 我会存储这些值 0 对于前者和 1 例如,对于后者。
我不知道如何在阿多尼斯做到这一点。我已经阅读了文档,也许我应该创建一个 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 ,显然,不是用户的角色。
所以我的问题是:我的迁移文件是正确的还是有更好的方法?另外,在创建游戏时如何更新连接表?

7gs2gvoe

7gs2gvoe1#

要更新关联表的额外属性,您应该使用pivot模型,这里可以将其用作attach方法的回调

await user.games().attach(games, (row) => {
   row.game_admin = 1 
})

相关问题