@@ -6,13 +6,14 @@ Reference for Prisma-like ORM client generated by `@constructive-io/graphql-code
66
77```
88generated/orm/
9- ├── index.ts # Main export (createClient, types)
10- ├── client.ts # createClient() function
11- ├── types.ts # All TypeScript types
12- └── models/ # Entity model implementations
13- ├── user.ts
14- ├── post.ts
15- └── ...
9+ |- index.ts # Main export (createClient, types)
10+ |- client.ts # createClient() function
11+ |- types.ts # All TypeScript types
12+ '- models/ # Entity model implementations
13+ |- user.ts
14+ |- post.ts
15+ |- postTag.ts # Junction table model (M:N)
16+ '- ...
1617```
1718
1819## Generated Files
@@ -75,6 +76,39 @@ db.user.update(options) // Update existing
7576db .user .delete (options ) // Delete
7677```
7778
79+ ### M: N Convenience Methods
80+
81+ When ` _meta ` enrichment provides M: N relation metadata, entity models also get:
82+
83+ ``` typescript
84+ // Generated on entities with M:N relations
85+ db .post .addTag (postId , tagId ) // Creates junction row
86+ db .post .removeTag (postId , tagId ) // Deletes junction row by composite PK
87+ db .tag .addPost (tagId , postId ) // Reverse direction
88+ db .tag .removePost (tagId , postId )
89+ ```
90+
91+ Method signatures use actual PK types from the junction table:
92+
93+ ``` typescript
94+ // UUID PKs -> string parameters
95+ addTag (postId : string , tagId : string ): QueryBuilder < ... >
96+
97+ // Integer PKs -> number parameters
98+ addStudent (courseId : number , studentId : number ): QueryBuilder < ... >
99+ ```
100+
101+ ### Junction Table Models
102+
103+ Junction tables get full CRUD models with composite PK support:
104+
105+ ``` typescript
106+ // Standard CRUD on junction table
107+ db .postTag .create ({ data: { postId , tagId } })
108+ db .postTag .findMany ({ where: { postId: { equalTo: id } } })
109+ db .postTag .delete ({ where: { postId , tagId } }) // Composite PK delete
110+ ```
111+
78112## Query Methods
79113
80114### findMany
@@ -170,9 +204,15 @@ const result = await db.user.update({
170204Delete item:
171205
172206``` typescript
207+ // Single PK
173208const result = await db .user .delete ({
174209 id: ' 123' ,
175210}).execute ();
211+
212+ // Composite PK (junction table)
213+ const result = await db .postTag .delete ({
214+ where: { postId: POST_1 , tagId: TAG_TECH },
215+ }).execute ();
176216```
177217
178218## Select and Type Inference
@@ -233,6 +273,7 @@ const users = await db.user.findMany({
233273### ManyToMany
234274
235275``` typescript
276+ // Query through M:N shortcut (when expose_in_api = true)
236277const posts = await db .post .findMany ({
237278 select: {
238279 id: true ,
@@ -241,6 +282,14 @@ const posts = await db.post.findMany({
241282 },
242283 },
243284}).execute ();
285+
286+ // Mutate via convenience methods
287+ await db .post .addTag (postId , tagId ).execute ();
288+ await db .post .removeTag (postId , tagId ).execute ();
289+
290+ // Or via junction table directly
291+ await db .postTag .create ({ data: { postId , tagId } }).execute ();
292+ await db .postTag .delete ({ where: { postId , tagId } }).execute ();
244293```
245294
246295### Deeply Nested
0 commit comments