Sam Weiss
05/10/2022, 10:52 PMreferId, `userId`: 1 to 1, and `referredUserId`: 1 to many.
model Referral {
id Int @id @default(autoincrement())
createdAt DateTime @default(now())
updatedAt DateTime @default(now())
referId String // Auto Generate Random String
userId Int @unique
user User @relation(fields: [userId], references: [id])
referredUsersId Int[]
referredUsers User[] @relation(fields: [referredUsersId], references: [id])
}
I'm not sure exactly how to reference these in the User model. I tried
Referral Referral?
UsersReferred Referral[]
But I get an error
Error validating model "User": Ambiguous relation detectedWhat's the correct way to model a referral table and how can I do it in prisma?
Sabin Adams
05/10/2022, 11:02 PMUsersReferred is an array and referredUsers is an array. Is that intentional?Sabin Adams
05/10/2022, 11:02 PMSabin Adams
05/10/2022, 11:03 PMSabin Adams
05/10/2022, 11:03 PMmodel User {
id String @id
Referral Referral? @relation("UserReferral")
UsersReferred Referral[] @relation("UsersReferred")
}
model Referral {
id Int @id @default(autoincrement())
createdAt DateTime @default(now())
updatedAt DateTime @default(now())
referId String
userId String @unique
user User @relation(fields: [userId], references: [id], name: "UserReferral")
referredUsersId String
referredUsers User @relation(fields: [referredUsersId], references: [id], name: "UsersReferred")
}Sam Weiss
05/11/2022, 12:02 AMuserId in the model Referral is not matching the type of the referenced field id in model User.Sam Weiss
05/11/2022, 12:04 AMuserId, but many referredUsersId . Makes sense?Sam Weiss
05/11/2022, 12:12 AMReferral table for every time a user makes a referral, making both userId and referredUsersId a one to oneSam Weiss
05/11/2022, 12:12 AMSabin Adams
05/11/2022, 12:14 AMSam Weiss
05/11/2022, 12:20 AMSam Weiss
05/11/2022, 12:22 AMmodel User {
Referral Referral? @relation("UserReferral")
UsersReferred Referral? @relation("UsersReferred")
}
model Referral {
id Int @id @default(autoincrement())
createdAt DateTime @default(now())
updatedAt DateTime @default(now())
userId Int @unique
user User @relation(fields: [userId], references: [id], name: "UserReferral")
referredUserId Int @unique
referredUser User @relation(fields: [referredUserId], references: [id], name: "UsersReferred")
}Sabin Adams
05/11/2022, 12:29 AMSam Weiss
05/11/2022, 12:30 AMSabin Adams
05/11/2022, 12:35 AMReferral should be a one-to-one because one user can have one referral from another user
UsersReferred should be a one-to-many because one user can have sent many referrals to other users.
So this same model would still apply:
model User {
id String @id
Referral Referral? @relation("UserReferral")
UsersReferred Referral[] @relation("UsersReferred")
}
model Referral {
id Int @id @default(autoincrement())
createdAt DateTime @default(now())
updatedAt DateTime @default(now())
referId String
userId String @unique
user User @relation(fields: [userId], references: [id], name: "UserReferral")
referredUsersId String
referredUsers User @relation(fields: [referredUsersId], references: [id], name: "UsersReferred")
}
It does depend on what your application needs to do though, so make sure you pick what works best for your needs.Sam Weiss
05/11/2022, 12:46 AMSabin Adams
05/11/2022, 12:47 AM