Core Operations
Complete reference for all CRUD operations available in Drizzle CRUD
Core Operations
Create
Create a new record in the database.
const user = await userCrud.create({
name: 'Jane Smith',
email: 'jane@example.com',
})
Parameters
data
- The data to insert (validated against schema)context?
- Optional context object with transaction, actor, etc.
Returns
The created record with all fields populated.
Find by ID
Find a single record by its primary key.
const user = await userCrud.findById('123', {
columns: { name: true, email: true }, // Select specific columns
includeDeleted: false, // Include soft-deleted records
})
Parameters
id
- The primary key valueoptions?
- Optional query optionscolumns?
- Select specific columnsincludeDeleted?
- Include soft-deleted records (default: false)
Returns
The found record or null
if not found.
List
List records with filtering, pagination, and search.
const result = await userCrud.list({
search: 'john',
filters: {
isActive: true,
createdAt: {
gte: new Date('2024-01-01'),
},
OR: [
{ name: 'john' },
{ name: 'John' },
],
},
orderBy: [{ field: 'createdAt', direction: 'desc' }],
page: 1,
limit: 20,
})
Parameters
options?
- Query optionssearch?
- Search term (searches acrosssearchFields
)filters?
- Filter object with conditionsorderBy?
- Array of sort conditionspage?
- Page number (1-based)limit?
- Number of records per pageincludeDeleted?
- Include soft-deleted records
Returns
{
results: T[], // Array of records
total: number, // Total count
page: number, // Current page
limit: number, // Records per page
totalPages: number // Total pages
}
Update
Update an existing record.
const updatedUser = await userCrud.update('123', {
name: 'John Updated',
isActive: false,
})
Parameters
id
- The primary key valuedata
- The data to update (validated against schema)context?
- Optional context object
Returns
The updated record or null
if not found.
Delete (Soft Delete)
Delete a record (soft delete if configured).
await userCrud.deleteOne('123')
Parameters
id
- The primary key valuecontext?
- Optional context object
Returns
true
if deleted, false
if not found.
Restore
Restore a soft-deleted record.
await userCrud.restore('123')
Only available when soft delete is configured.
Parameters
id
- The primary key valuecontext?
- Optional context object
Returns
true
if restored, false
if not found.
Permanent Delete
Permanently delete a record (hard delete).
await userCrud.permanentDelete('123')
Parameters
id
- The primary key valuecontext?
- Optional context object
Returns
true
if deleted, false
if not found.
Bulk Operations
Bulk Create
Create multiple records at once.
const users = await userCrud.bulkCreate([
{ name: 'User 1', email: 'user1@example.com' },
{ name: 'User 2', email: 'user2@example.com' },
])
Bulk Delete
Delete multiple records at once.
await userCrud.bulkDelete(['1', '2', '3'])
Bulk Restore
Restore multiple soft-deleted records.
await userCrud.bulkRestore(['1', '2', '3'])
Context Options
All operations accept an optional context object:
await userCrud.create(data, {
db: tx, // Use transaction
actor: userActor, // Set actor for access control
scope: scopeFilters, // Apply scope filters
skipValidation: true // Skip schema validation
})
Context Properties
db?
- Database instance or transactionactor?
- Actor object for access controlscope?
- Scope filters to applyskipValidation?
- Skip schema validation
Error Handling
try {
await userCrud.create({ name: 'John' }) // Missing required email
} catch (error) {
console.log(error.message) // Validation error details
}
try {
await userCrud.restore('123') // Without soft delete config
} catch (error) {
console.log(error.message) // "Restore operation requires soft delete to be configured"
}
Next Steps
- Advanced Filtering - Learn about complex filters
- Access Control - Implement security
- Lifecycle Hooks - Add custom business logic