Skip to Content

Relations

The examples use the following prisma schema:

model User {
  id    String @id @default(cuid())
  name  String
  posts Post[]
}
 
model Post {
  id        String   @id @default(cuid())
  createdAt DateTime @default(now())
  updatedAt DateTime @updatedAt
  published Boolean
  title     String
  content   String?
 
  // optional author
  user   User?   @relation(fields: [userID], references: [id])
  userID String?
 
  comments Comment[]
}
 
model Comment {
  id        String   @id @default(cuid())
  createdAt DateTime @default(now())
  content   String
 
  post   Post   @relation(fields: [postID], references: [id])
  postID String
}

Find by nested relation

In a query, you can query for relations by using “Some”, “Every” or “None”.

Please see the caveats for the “Every” filter.

// get posts which have at least one comment with a content "My Content" and that post's titles are all "What up?"
posts, err := client.Post.FindMany(
  db.Post.Title.Equals("What up?"),
  db.Post.Comments.Some(
    db.Comment.Content.Equals("My Content"),
  ),
).Exec(ctx)

You can nest relation queries as deep as you like:

users, err := client.User.FindMany(
  db.User.Name.Equals("Author"),
  db.User.Posts.Some(
    db.Post.Title.Equals("What up?"),
    db.Post.Comments.Some(
      db.Comment.Content.Equals("My Content"),
    ),
    db.Post.Comments.None(
      db.Comment.Content.Equals("missing"),
    ),
  ),
).Exec(ctx)