Home > OS >  How to select a custom User model property?
How to select a custom User model property?

Time:03-30

I added a company property to the User model in my prisma.schema file (The rest of the prisma.schema file is still similar to the one in the documentation: https://next-auth.js.org/adapters/prisma)

model User {
  id            String    @id @default(cuid())
  name          String?
  email         String?   @unique
  emailVerified DateTime?
  image         String?
  accounts      Account[]
  sessions      Session[]
  company       Company?
}

model Company {
  id            Int     @id @default(autoincrement())
  companyName   String  @unique
  gender        String
  firstName     String
  lastName      String
  street        String
  houseNumber   Int
  postcode      Int
  city          String
  country       String
  countryCode   String
  callNumber    Int
  emailAddress  String
  website       String?
  socials       Json?
  companyUser   User    @relation(fields: [companyUserId], references: [id])
  companyUserId String  @unique
}

The whole authentification process is working fine even after the change but when I try to select a User from the database it only returns a certain portion of the User namely the id, name, email, emailVerified and image property. How can I change this behaviour?

const user = await prisma.user.findUnique({
                where: {
                    id: ...
                }
            })

For sure I could only create the Company model without connecting it to the User model and maybe adding the User's id to it to have an implicit connection, but that's undermining the whole purpose...

CodePudding user response:

you're looking for nested reads, if you want to include the whole company model you should use include with the name of the relation, note that this will return all the fields for that specific relation:

const user = await prisma.user.findUnique({
                where: {
                    id: ...
                },
                include: {
                    company: true,
                },
            })

if you want to return specific relation fields with the whole user you should use select inside include:

const user = await prisma.user.findUnique({
                where: {
                    id: ...
                },
                include: {
                    company: {
                     firstName: true,
                  },
                },
            })
  • Related