Basic CRUD Operations
Learn how to create, read, update, and delete records
Setup
First, define a simple User model:
models/User.ts
import { defineModel, DataTypes } from "stabilize-orm";
export const User = defineModel({ tableName: "users", timestamps: { createdAt: "createdAt", updatedAt: "updatedAt" }, columns: { id: { type: DataTypes.STRING, required: true, unique: true, }, email: { type: DataTypes.STRING, length: 255, required: true, unique: true, }, name: { type: DataTypes.STRING, length: 100, required: true, }, age: { type: DataTypes.INTEGER, }, isActive: { type: DataTypes.BOOLEAN, defaultValue: true, }, },});Create (Insert)
Insert a new user into the database:
examples/create-user.ts
import { orm } from "./db";import { User } from "./models/User";import { generateUUID } from "stabilize-orm";
const userRepository = orm.getRepository(User);
// Create a single userconst newUser = await userRepository.create({ id: generateUUID(), email: "lwazicd@icloud.com", name: "Lwazi Dlamini", age: 30,});
console.log("Created user:", newUser);
// Create multiple users at onceconst users = await userRepository.bulkCreate([ { id: generateUUID(), email: "sibusiso@swazi.com", name: "Sibusiso", age: 25 }, { id: generateUUID(), email: "phindile@swazi.com", name: "Phindile", age: 35 },]);Read (Query)
Retrieve users from the database:
examples/read-users.ts
// Find all usersconst allUsers = await userRepository.find().execute(orm.client);
// Find by IDconst user = await userRepository.findOne(user.id);
// Find one by conditions (TypeORM-style)const userByEmail = await userRepository.findOneBy({ email: "lwazicd@icloud.com" });
// Find many by conditionsconst activeUsers = await userRepository.findBy({ isActive: true });
// Query builder with conditionsconst filtered = await userRepository .find() .where("age >= ?", 25) .where("isActive = ?", true) .orderBy("name", "ASC") .limit(10) .execute(orm.client);Update
Modify existing user records:
examples/update-user.ts
// Update by IDconst updatedUser = await userRepository.update(user.id, { name: "Lwazi Smith", age: 31,});console.log("Updated:", updatedUser);
// Conditional bulk updateconst affectedRows = await userRepository.updateBy( { isActive: false }, { age: 0 });console.log("Updated", affectedRows, "users");
// Increment/decrement a fieldawait userRepository.increment(user.id, "age", 1);await userRepository.decrement(user.id, "age", 1);Delete
Remove users from the database:
examples/delete-user.ts
// Delete by ID (soft delete if model has deletedAt)await userRepository.delete(user.id);
// Conditional bulk deleteconst deletedCount = await userRepository.deleteBy({ isActive: false });console.log("Deleted", deletedCount, "users");
// Bulk delete by IDsawait userRepository.bulkDelete([id1, id2, id3]);
// Recover soft-deleted recordawait userRepository.recover(user.id);
// Recover all soft-deletedawait userRepository.recoverAll();Count & Aggregations
Get statistics about your data:
examples/aggregate-user.ts
// Count all usersconst totalUsers = await userRepository.count();
// Count with conditionsconst activeCount = await userRepository.count({ isActive: true });
// Check existenceconst exists = await userRepository.exists({ email: "lwazicd@icloud.com" });
// Aggregate functionsconst stats = await userRepository.aggregate({ count: "*", avg: ["age"], min: ["age"], max: ["age"],});console.log(stats);// { count_all: 10, avg_age: 28.5, min_age: 18, max_age: 65 }
// Count distinct valuesconst distinctAges = await userRepository.countDistinct("age");
// Get single column valuesconst emails = await userRepository.pluck("email");