Registry / database / adonis-lucid-soft-deletes

adonis-lucid-soft-deletes

JSON →
library2.1.0jsnpmunverified

Adds soft delete functionality to AdonisJS Lucid ORM models using a `deleted_at` flag. Version 2.1.0 supports AdonisJS 6 and Lucid 21.1+. Automatically excludes soft-deleted records from queries, provides `withTrashed()` and `onlyTrashed()` scopes, and offers `restore()` method. Ships TypeScript types and uses a mixin pattern via `compose()`. Requires Node >=20.6.0. Active development.

npm install adonis-lucid-soft-deletes
INSTALL
IMPORT
SIG · ADONIS-LUCID-SOFT-
A
adonis-lucid-soft-deletes
databasejavascriptv2.1.0
harness data pending
Install & Compatibility
Where this runs

No compatibility data collected yet for this library.

Code
Verified usage

Verified import paths — ran on the pinned version, not inferred.

SoftDeletes
import { SoftDeletes } from 'adonis-lucid-soft-deletes'
const { SoftDeletes } = require('adonis-lucid-soft-deletes')
ESM-only package; CommonJS require not supported.
provider
() => import('adonis-lucid-soft-deletes/provider')
'adonis-lucid-soft-deletes/provider'
Provider must be a lazy import function in adonisrc.ts, not a string.
compose
import { compose } from '@adonisjs/core/helpers'
import { compose } from 'adonis-lucid-soft-deletes'
compose is part of AdonisJS core, not this package.

Complete setup: install, configure provider, migration with deleted_at, model with SoftDeletes mixin, and controller actions for delete, restore, and show with trashed check.

// Install: npm i adonis-lucid-soft-deletes && node ace configure adonis-lucid-soft-deletes // In adonisrc.ts, add provider: // providers: [ // () => import('adonis-lucid-soft-deletes/provider'), // ] // Migration: add timestamp column import { BaseSchema } from '@adonisjs/lucid/schema' export default class extends BaseSchema { protected tableName = 'users' async up() { this.schema.createTable(this.tableName, (table) => { table.increments('id') table.string('email') table.timestamp('deleted_at').nullable() }) } async down() { this.schema.dropTable(this.tableName) } } // Model: apply mixin import { DateTime } from 'luxon' import { BaseModel, column } from '@adonisjs/lucid/orm' import { compose } from '@adonisjs/core/helpers' import { SoftDeletes } from 'adonis-lucid-soft-deletes' export default class User extends compose(BaseModel, SoftDeletes) { @column({ isPrimary: true }) declare id: number @column() declare email: string @column.dateTime() declare deletedAt: DateTime | null } // Usage in controller import User from '#models/user' export default class UsersController { async destroy({ params, response }) { const user = await User.findOrFail(params.id) await user.delete() response.noContent() } async show({ params }) { const user = await User.withTrashed().where('id', params.id).firstOrFail() if (user.trashed) { return response.forbidden() } return user } async restore({ params }) { const user = await User.withTrashed().where('id', params.id).firstOrFail() await user.restore() return user } }
Debug
Known issues
breakingVersion 2.x is for AdonisJS v6 only; v1 is for AdonisJS v5 and will not work with v6.
fix
Use adonis-lucid-soft-deletes@1 if on AdonisJS v5, or upgrade to AdonisJS v6.
affects: >=2.0.0
gotchaSoft delete only works on model instances; bulk delete via query builder bypasses soft delete.
fix
Always use model instance delete (e.g., `user.delete()`) for soft delete; use `User.query().delete()` only for hard deletes.
affects: >=1.0.0
gotchaThe `deleted_at` column must be nullable timestamp; otherwise soft delete will fail.
fix
Ensure migration uses `table.timestamp('deleted_at').nullable()`.
affects: >=1.0.0
deprecatedThe `deletedAt` property must be declared with `@column.dateTime` decorator and type `DateTime | null`.
fix
Add `@column.dateTime() declare deletedAt: DateTime | null` to the model.
affects: >=2.0.0
gotchaCustom column name requires both decorator and mixin column name mismatch.
fix
Set `@column.dateTime({ columnName: 'customDeletedAtColumn' })` and ensure database column matches.
affects: >=1.0.0
Errors
Common errors & fixes
Error: Cannot find module 'adonis-lucid-soft-deletes/provider'
Provider not imported correctly in adonisrc.ts.
fix
Use lazy import: `() => import('adonis-lucid-soft-deletes/provider')`
Property 'withTrashed' does not exist on type 'typeof User'
Model does not use SoftDeletes mixin or it is not imported.
fix
Apply mixin: `export default class User extends compose(BaseModel, SoftDeletes)`
TypeError: user.restore is not a function
Calling restore on non-soft-deleted model or missing mixin.
fix
Ensure model uses SoftDeletes mixin and call restore on soft-deleted instance.
ER_BAD_NULL_ERROR: Column 'deleted_at' cannot be null
Migration defines deleted_at as NOT NULL.
fix
Use `.nullable()` in migration: `table.timestamp('deleted_at').nullable()`
Upgrade
Version history
2.1.0latest on npm
Audit
Dependencies
@adonisjs/corerequiredCore framework dependency for `compose` helper and providers.
@adonisjs/lucidrequiredORM dependency for model base class and query builder extensions.
Agent activity
29 hits · last 30 days
node
24
OpenAI (training)
1
Resources
adonis-lucid-soft-deletes — npm install adonis-lucid-soft-deletes · libregistry