Итак, у меня есть две таблицы, которые имеют отношение многие ко многим:
1) Games
, с информацией о совпадениях, созданных пользователями, и
2) Users
.
Помимо отношений пользователь / игра, в которых game
принадлежит многим users
, а user
принадлежит многим games
, существует также связь, в которой user
может применяться для многих games
и game
может быть применено многими users
.Для этого отношения я создал соединительную таблицу с именем requests
.
. Я использую AdonisJs, поэтому я установил модель Games
с
applicants () {
return this.belongsToMany(
'App/Models/User',
'game_id',
'applicant_id'
).pivotTable('requests')
}
и модель Users
с
applications () {
return this.belongsToMany(
'App/Models/Game',
'applicant_id',
'game_id'
).pivotTable('requests')
}
Мне нужно запросить всех пользователей, которые обращались к любой из игр аутентифицированного пользователя (определяется с помощью указанного идентификатора пользователя как user_id
)
Когда я использую код
async getAllUserGames ({ auth, response }) {
const allUserGames = await Game.query()
.where('user_id', auth.current.user.id)
.with('applicants')
.firstOrFail()
return response.json({
status: 'success',
data: allUserGames
})
}
это работает, но, как я использовал .firstOrFail()
, я получаю информацию только из первой игры, в которой есть приложение.
Если я избавлюсь от этой строки, она не вернетсялюбой из претендентов, только игры пользователя, как если бы у меня тоже не было строки .with('applicants')
.
Я все еще пытаюсь справиться с запросами к базам данных, поэтому я был бы признателен за пониманиепочему это происходит.