Bird
Raised Fist0
NestJSframework~20 mins

Relations in Prisma in NestJS - Practice Problems & Coding Challenges

Choose your learning style10 modes available
Challenge - 5 Problems
🎖️
Prisma Relations Master
Get all challenges correct to earn this badge!
Test your skills under time pressure!
❓ component_behavior
intermediate
2:00remaining
What is the output of this Prisma query with relations?
Given the Prisma schema with User and Post models where User has many Posts, what will this query return?
NestJS
const userWithPosts = await prisma.user.findUnique({
  where: { id: 1 },
  include: { posts: true }
});
console.log(userWithPosts);
AAn array of posts without any user data
BOnly the user data without any posts included
CAn object with user data and an array of all posts by that user under the 'posts' key
DA syntax error because 'include' is not valid here
Attempts:
2 left
💡 Hint
Think about what the 'include' option does in Prisma queries.
❓ state_output
intermediate
2:00remaining
What is the value of 'post.author' after this Prisma query?
Given the models Post and User where Post has a relation to User as 'author', what does this code output?
NestJS
const post = await prisma.post.findUnique({
  where: { id: 5 },
  include: { author: true }
});
console.log(post.author);
AAn object containing the author's user data for the post with id 5
BUndefined because 'author' is not included by default
CAn array of all users in the database
DA runtime error because 'author' is not a valid relation
Attempts:
2 left
💡 Hint
Check how 'include' works with nested relations.
📝 Syntax
advanced
2:30remaining
Which option correctly defines a one-to-many relation in Prisma schema?
You want to define a User who has many Posts. Which schema snippet is correct?
A
model User {
  id    Int    @id @default(autoincrement())
  posts Post[]
}

model Post {
  id       Int  @id @default(autoincrement())
  userId   Int
}
B
model User {
  id    Int    @id @default(autoincrement())
  posts Post[]
}

model Post {
  id       Int  @id @default(autoincrement())
  userId   Int
  user     User @relation(fields: [userId], references: [id])
}
C
model User {
  id    Int    @id @default(autoincrement())
  posts Post[]
}

model Post {
  id       Int  @id @default(autoincrement())
  user     User
}
D
model User {
  id    Int    @id @default(autoincrement())
  posts Post
}

model Post {
  id       Int  @id @default(autoincrement())
  userId   Int
  user     User
}
Attempts:
2 left
💡 Hint
Look for the correct use of @relation with fields and references.
🔧 Debug
advanced
2:30remaining
Why does this Prisma query throw an error?
Given the models User and Post where User has a relation to Post as 'posts', this code throws an error. What is the cause?
NestJS
const users = await prisma.user.findMany({
  where: { posts: { id: 1 } }
});
AMissing 'include' to fetch related author data
BThe 'posts' field does not exist in the User model
CThe 'findMany' method cannot filter by relations
DThe 'where' filter uses a nested object without 'some' or 'every' for a relation array
Attempts:
2 left
💡 Hint
Check how to filter by relations that are arrays in Prisma.
🧠 Conceptual
expert
3:00remaining
How does Prisma handle cascading deletes in relations by default?
Consider a one-to-many relation where deleting a User should delete all their Posts. What is Prisma's default behavior if no cascade is specified?
APrisma prevents deleting the User if related Posts exist, throwing an error
BPrisma automatically deletes all related Posts when the User is deleted
CPrisma sets the foreign key in Posts to null when the User is deleted
DPrisma ignores the relation and deletes the User without affecting Posts
Attempts:
2 left
💡 Hint
Think about database foreign key constraints and Prisma's default relation behavior.

Practice

(1/5)
1. What type of relation in Prisma connects one record to many records in another model?
easy
A. One-to-many relation
B. One-to-one relation
C. Many-to-many relation
D. No relation

Solution

  1. Step 1: Understand relation types in Prisma

    Prisma supports one-to-one, one-to-many, and many-to-many relations to connect models.
  2. Step 2: Identify the relation connecting one record to many

    One-to-many means one record in a model relates to multiple records in another model.
  3. Final Answer:

    One-to-many relation -> Option A
  4. Quick Check:

    One record linked to many = One-to-many [OK]
Hint: One record to many records means one-to-many relation [OK]
Common Mistakes:
  • Confusing one-to-one with one-to-many
  • Thinking many-to-many is one-to-many
  • Assuming no relation means one-to-many
2. Which of the following is the correct Prisma schema syntax for a one-to-one relation between User and Profile models?
easy
A. model User {\n id Int @id @default(autoincrement())\n profiles Profile[]\n}\n\nmodel Profile {\n id Int @id @default(autoincrement())\n user User\n}
B. model User {\n id Int @id @default(autoincrement())\n profile Profile? @relation(fields: [profileId], references: [id])\n profileId Int?\n}\n\nmodel Profile {\n id Int @id @default(autoincrement())\n user User?\n}
C. model User {\n id Int @id @default(autoincrement())\n profile Profile\n}\n\nmodel Profile {\n id Int @id @default(autoincrement())\n user User\n}
D. model User {\n id Int @id @default(autoincrement())\n profileId Int\n}\n\nmodel Profile {\n id Int @id @default(autoincrement())\n}

Solution

  1. Step 1: Check one-to-one relation syntax

    One-to-one relations use a single optional foreign key field with @relation specifying fields and references.
  2. Step 2: Verify the syntax

    The correct schema declares profile Profile? @relation(fields: [profileId], references: [id]) and profileId Int? in User, with user User? in Profile. This matches the pattern for optional one-to-one.
  3. Final Answer:

    Schema with explicit optional FK and @relation -> Option B
  4. Quick Check:

    One-to-one uses single foreign key with @relation [OK]
Hint: One-to-one needs single foreign key with @relation fields [OK]
Common Mistakes:
  • Using array [] for one-to-one relation
  • Missing @relation fields and references
  • Not making foreign key optional
3. Given the Prisma models below, what will be the result of the query prisma.user.findUnique({ where: { id: 1 }, include: { posts: true } }) if user with id 1 has two posts?

model User {
  id    Int    @id @default(autoincrement())
  name  String
  posts Post[]
}

model Post {
  id      Int   @id @default(autoincrement())
  title   String
  userId  Int
  user    User  @relation(fields: [userId], references: [id])
}
medium
A. An error because 'include' is not valid here
B. An object with user data but 'posts' will be undefined
C. An object with user data and an array of two post objects under 'posts'
D. An array of posts only without user data

Solution

  1. Step 1: Understand the Prisma query with include

    The query fetches a user by id and includes related posts as an array.
  2. Step 2: Check relation and data

    User with id 1 has two posts, so 'posts' will be an array of two post objects inside the user object.
  3. Final Answer:

    User object with posts array of two posts -> Option C
  4. Quick Check:

    Include fetches related data as array [OK]
Hint: Include fetches related records as array or object [OK]
Common Mistakes:
  • Expecting posts to be undefined without include
  • Thinking include causes error
  • Expecting only posts without user
4. Identify the error in this Prisma schema for a one-to-many relation between Author and Book models:

model Author {
  id    Int    @id @default(autoincrement())
  name  String
  books Book
}

model Book {
  id       Int    @id @default(autoincrement())
  title    String
  authorId Int
  author   Author @relation(fields: [authorId], references: [id])
}
medium
A. Author model is missing a primary key
B. Missing @relation on Author.books field
C. authorId should be optional in Book model
D. The 'books' field in Author should be an array (Book[]) not a single Book

Solution

  1. Step 1: Check relation type from schema

    Author to Book is one-to-many, so Author.books must be an array of Book.
  2. Step 2: Identify the mistake

    Author.books is declared as a single Book, which is incorrect for one-to-many.
  3. Final Answer:

    'books' must be Book[] array -> Option D
  4. Quick Check:

    One-to-many uses array field [OK]
Hint: One-to-many needs array [] on 'many' side field [OK]
Common Mistakes:
  • Using single object instead of array for many side
  • Forgetting @relation decorator
  • Making foreign key optional incorrectly
5. You want to fetch all Order records with their related Customer data, but only include customers who have placed more than 5 orders. Which Prisma query approach correctly applies this filter using relations?

model Customer {
  id     Int     @id @default(autoincrement())
  name   String
  orders Order[]
}

model Order {
  id         Int      @id @default(autoincrement())
  total      Float
  customerId Int
  customer   Customer @relation(fields: [customerId], references: [id])
}
hard
A. Use findMany on Order with include: { customer: true } and a where on customer orders count > 5
B. Use findMany on Customer with where: { orders: { some: {} } } and include orders
C. Use findMany on Order with where: { customer: { orders: { count: { gt: 5 } } } } and include customer
D. Use findMany on Customer with include: { orders: true } and filter orders count > 5 in JavaScript

Solution

  1. Step 1: Understand filtering by related model count

    Prisma allows filtering with nested conditions on related models using 'where' and relation filters.
  2. Step 2: Identify correct query

    Using findMany on Order with include: { customer: true } and where: { customer: { orders: { _count: { gt: 5 } } } } fetches the desired orders with customers who have more than 5 orders.
  3. Final Answer:

    findMany on Order with relational where filter and customer include -> Option A
  4. Quick Check:

    Filter related model count in where clause [OK]
Hint: Filter related model count in where clause with include [OK]
Common Mistakes:
  • Filtering in JavaScript instead of query
  • Using incorrect nested where syntax
  • Filtering on Customer without including orders count
Recommended

Ready to prove it?

Pass the test and this pattern moves unknown strong while earning +1 Grip toward your certificate.

10 questions~5 mineasy hard