У меня есть база данных с тремя таблицами: users
, games
и game_user
. users
и games
имеют отношение "многие ко многим" с game_user
в качестве таблицы соединений
В таблице 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
, очевидно, не с ролью пользователя.
Итак, мой вопрос: верен ли мой файл миграции или есть способ лучше? Также как я могу обновить соединительную таблицу при создании игры?