From 2ea3d3d2bcefc272ee11e9cd2b99821eeb6366ba Mon Sep 17 00:00:00 2001 From: Moshe Dicker Date: Wed, 17 Apr 2024 13:59:57 -0400 Subject: [PATCH] add docs for CRUD --- docs/lib/snippets/dart_api/manager.dart | 61 +++++++++++++++++++++++-- docs/pages/docs/Dart API/manager.md | 18 +++++++- 2 files changed, 75 insertions(+), 4 deletions(-) diff --git a/docs/lib/snippets/dart_api/manager.dart b/docs/lib/snippets/dart_api/manager.dart index 085efc1e..933234ed 100644 --- a/docs/lib/snippets/dart_api/manager.dart +++ b/docs/lib/snippets/dart_api/manager.dart @@ -1,9 +1,64 @@ +import 'package:drift/drift.dart'; + import '../setup/database.dart'; extension ManagerExamples on AppDatabase { - // #docregion create + // #docregion manager_create Future createTodoItem() async { - await managers.todoItems.create((o) => o(title: '', content: '')); + // Create a new item + await managers.todoItems + .create((o) => o(title: 'Title', content: 'Content')); + + // We can also use `mode` and `onConflict` parameters, just + // like in the `[InsertStatement.insert]` method on the table + await managers.todoItems.create( + (o) => o(title: 'Title', content: 'New Content'), + mode: InsertMode.replace); + + // We can also create multiple items at once + await managers.todoItems.bulkCreate( + (o) => [ + o(title: 'Title 1', content: 'Content 1'), + o(title: 'Title 2', content: 'Content 2'), + ], + ); } - // #enddocregion create + // #enddocregion manager_create + + // #docregion manager_update + Future updateTodoItems() async { + // Update all items + await managers.todoItems.update((o) => o(content: Value('New Content'))); + + // Update multiple items + await managers.todoItems + .filter((f) => f.id.isIn([1, 2, 3])) + .update((o) => o(content: Value('New Content'))); + } + // #docregion manager_update + + // #docregion manager_replace + Future replaceTodoItems() async { + // Replace a single item + var obj = await managers.todoItems.filter((o) => o.id(1)).getSingle(); + obj = obj.copyWith(content: 'New Content'); + await managers.todoItems.replace(obj); + + // Replace multiple items + var objs = + await managers.todoItems.filter((o) => o.id.isIn([1, 2, 3])).get(); + objs = objs.map((o) => o.copyWith(content: 'New Content')).toList(); + await managers.todoItems.bulkReplace(objs); + } + // #docregion manager_replace + + // #docregion manager_delete + Future deleteTodoItems() async { + // Delete all items + await managers.todoItems.delete(); + + // Delete a single item + await managers.todoItems.filter((f) => f.id(5)).delete(); + } + // #docregion manager_delete } diff --git a/docs/pages/docs/Dart API/manager.md b/docs/pages/docs/Dart API/manager.md index f4ac99fb..d43efbfb 100644 --- a/docs/pages/docs/Dart API/manager.md +++ b/docs/pages/docs/Dart API/manager.md @@ -23,11 +23,27 @@ instructions. ### Filtering across tables +### Ordering + ## Updates +We can use the manager to update rows in bulk or individual rows that meet a certain condition. + +{% include "blocks/snippet" snippets = snippets name = 'manager_update' %} + +We can also replace an entire row with a new one. Or even replace multiple rows at once. + +{% include "blocks/snippet" snippets = snippets name = 'manager_replace' %} ## Creating rows +The manager includes a method for quickly inserting rows into a table. +We can insert a single row or multiple rows at once. + +{% include "blocks/snippet" snippets = snippets name = 'manager_create' %} -{% include "blocks/snippet" snippets = snippets name = 'create' %} ## Deleting rows +We may also delete rows from a table using the manager. +Any rows that meet the specified condition will be deleted. + +{% include "blocks/snippet" snippets = snippets name = 'manager_delete' %}