@@ -3,11 +3,9 @@ title: Drizzle
33description :
44---
55
6- ## Database
6+ ## ` useDB() `
77
8- To enhance your development experience with databases, we recommand creating this type of composable:
9-
10- ### ` useDB() `
8+ To enhance your DX with databases, we recommand using our pattern with ` useDB() ` :
119
1210``` ts
1311import { sqliteTable , text , integer } from ' drizzle-orm/sqlite-core'
@@ -31,3 +29,63 @@ export function useDB() {
3129```
3230
3331This allows you to conveniently reference your tables and interact directly with the [ Drizzle API] ( https://orm.drizzle.team/docs/overview ) .
32+
33+ ### Select
34+
35+ ``` ts[/api/todos/index.get.ts]
36+ export default eventHandler(async () => {
37+ const todos = await useDB().select().from(tables.todos).all()
38+
39+ return todos
40+ })
41+ ```
42+
43+ ### Insert
44+
45+ ``` ts[/api/todos/index.post.ts]
46+ export default eventHandler(async (event) => {
47+ const { title } = await readBody(event)
48+
49+ const todo = await useDB().insert(tables.todos).values({
50+ title,
51+ createdAt: new Date()
52+ }).returning().get()
53+
54+ return todo
55+ })
56+ ```
57+
58+ ### Update
59+
60+ ``` ts[/api/todos/[id].patch.ts]
61+ export default eventHandler(async (event) => {
62+ const { id } = getRouterParams(event)
63+ const { completed } = await readBody(event)
64+
65+ const todo = await useDB().update(tables.todos).set({
66+ completed
67+ }).where(eq(tables.todos.id, Number(id))).returning().get()
68+
69+ return todo
70+ })
71+ ```
72+
73+ ### Delete
74+
75+ ``` ts[/api/todos/[id].delete.ts]
76+ export default eventHandler(async (event) => {
77+ const { id } = getRouterParams(event)
78+
79+ const deletedTodo = await useDB().delete(tables.todos).where(and(
80+ eq(tables.todos.id, Number(id))
81+ )).returning().get()
82+
83+ if (!deletedTodo) {
84+ throw createError({
85+ statusCode: 404,
86+ message: 'Todo not found'
87+ })
88+ }
89+ return deletedTodo
90+ })
91+ ```
0 commit comments