Понимание Призмы - PullRequest
       17

Понимание Призмы

0 голосов
/ 09 марта 2020

Я пытаюсь использовать отношения один-ко-многим в Призме и растерялся. Моя цель состоит в том, чтобы при создании спортсмена ему была назначена команда, и команда также обновляется, чтобы показать всех атлетов, назначенных для него. Мой распознаватель показан ниже.

async function signUpUser(parent, args, { prisma }, info) {
    let password = await bcrypt.hash(args.password, 10)

    const team = await prisma.team({ id: args.team })

    const user = await prisma.createUser({
        ...args,
        password,
        team: { connect: { id: team.id } }
    })
    //create special user based on user type from args
    switch(args.userType) {
        case "ATHLETE":
            createAthlete(user, prisma)
            break
        case "COACH":
            createCoach(user, prisma)
            break
        case "HEAD_COACH":
            createHeadCoach(user, prisma)
            break
        case "PARENT":
            createParent(user, prisma)
            break
        default:
            createAthlete(user, prisma)
    }

    return {
        user
        }
    }

    async function createAthlete(user, prisma) {

    const athlete = await prisma.createAthlete({
       user: { connect: { id: user.id } }
    })

    return athlete
   }

Этот код работает почти так, как мне бы хотелось. Пользователь задан командой и спортсменом. Однако в моей модели данных я хочу, чтобы команда, в которой они хранятся, показывала всех спортсменов, назначенных в этой команде. Я считаю, что мне нужно использовать метод upsert, но не знаю как.

1 Ответ

0 голосов
/ 10 марта 2020
async function createAthlete(user, team, prisma) {

    const athlete = await prisma.createAthlete({
       user: { connect: { id: user.id } }
    })

    const updatedTeam = await prisma.updateTeam({
        where: { id: team.id },
        data: {
            athletes: {
                connect: {
                    id: athlete.id,
                }
            }
        },
    })
    return {athlete, updatedTeam}
}
...