Initial commit
This commit is contained in:
@@ -0,0 +1,81 @@
|
||||
# Nested Selection Patterns
|
||||
|
||||
## Deep Relation Hierarchies
|
||||
|
||||
Select fields deep in relation hierarchies:
|
||||
|
||||
```typescript
|
||||
const posts = await prisma.post.findMany({
|
||||
select: {
|
||||
title: true,
|
||||
author: {
|
||||
select: {
|
||||
name: true,
|
||||
profile: {
|
||||
select: {
|
||||
avatar: true,
|
||||
},
|
||||
},
|
||||
},
|
||||
},
|
||||
comments: {
|
||||
select: {
|
||||
content: true,
|
||||
author: {
|
||||
select: {
|
||||
name: true,
|
||||
},
|
||||
},
|
||||
},
|
||||
take: 5,
|
||||
orderBy: {
|
||||
createdAt: 'desc',
|
||||
},
|
||||
},
|
||||
},
|
||||
})
|
||||
```
|
||||
|
||||
## Combining Select with Filtering
|
||||
|
||||
Optimize both data transfer and query performance:
|
||||
|
||||
```typescript
|
||||
const recentPosts = await prisma.post.findMany({
|
||||
where: {
|
||||
published: true,
|
||||
createdAt: {
|
||||
gte: new Date(Date.now() - 7 * 24 * 60 * 60 * 1000),
|
||||
},
|
||||
},
|
||||
select: {
|
||||
id: true,
|
||||
title: true,
|
||||
excerpt: true,
|
||||
createdAt: true,
|
||||
author: {
|
||||
select: {
|
||||
id: true,
|
||||
name: true,
|
||||
},
|
||||
},
|
||||
_count: {
|
||||
select: {
|
||||
comments: true,
|
||||
likes: true,
|
||||
},
|
||||
},
|
||||
},
|
||||
orderBy: {
|
||||
createdAt: 'desc',
|
||||
},
|
||||
take: 10,
|
||||
})
|
||||
```
|
||||
|
||||
## Key Principles
|
||||
|
||||
- Nest selections to match data shape requirements
|
||||
- Use `take` on nested relations to prevent over-fetching
|
||||
- Combine `orderBy` with nested relations for sorted results
|
||||
- Use `_count` for relation counts instead of loading all records
|
||||
Reference in New Issue
Block a user