Как обновить таблицу соединений с ролью пользователя в Adonis

У меня есть база данных с тремя таблицами: 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, очевидно, не с ролью пользователя.

Итак, мой вопрос: верен ли мой файл миграции или есть способ лучше? Также как я могу обновить соединительную таблицу при создании игры?


person pharaohlxvi    schedule 01.06.2018    source источник
comment
Тег сводной таблицы предназначен для транспонирования строк в столбцы, а не псевдонима для соединительных таблиц. Некоторые ORM называют соединительные таблицы сводными, что сбивает с толку многих разработчиков. Пожалуйста, прочтите описания тегов перед их использованием.   -  person Shadow    schedule 02.06.2018
comment
Хорошо, извините за это, но я думаю, что тег может быть обновлен или создан новый, поскольку некоторые ORM относятся к таблицам соединений как к сводным таблицам. Только мои два цента, но это ничего не меняет в вопросе (кроме некоторых вариантов слов. Тем не менее, спасибо за исправление.   -  person pharaohlxvi    schedule 02.06.2018
comment
Или вы можете попросить людей, стоящих за выбранным вами ORM, перестать называть таблицы соединений как сводные ... Определение тега сводной таблицы просто замечательно, добавление этой ссылки запутает пользователей. Вам удалось найти нужный тег для вашего вопроса после того, как вас спросили.   -  person Shadow    schedule 02.06.2018


Ответы (1)


Чтобы обновить дополнительные атрибуты таблицы ассоциаций, вы должны использовать сводные модели, вот что вы можете использовать в качестве обратного вызова для присоединения метода

await user.games().attach(games, (row) => {
   row.game_admin = 1 
})
person SBN    schedule 29.10.2019
comment
Еще одна вещь для сводных моделей: схема должна быть изменена, имя таблицы в этом случае станет game_users - person SBN; 29.10.2019