www/apps/resources/app/data-model-repository-reference/methods/softDelete/page.mdx
import { TypeList } from "docs-ui"
export const metadata = {
title: softDelete Method - Data Model Repository Reference,
}
The softDelete method of a data model repository soft-deletes one or more records of the data model.
This means that the records are still available in the database, but they are marked as deleted by setting their deleted_at property to the deletion date.
You can later restore the records using the restore method.
<Note>This reference assumes you've already resolved the data model repository, as explained in the Data Model Repository Reference documentation.
</Note>softDelete Parametersstring \| string[] \| object",
name: "filters",
description: "Can be either the ID of a record to soft-delete, an array of records IDs to soft-delete, or an object of filters to select the records to soft-delete.",
required: true,
}
]}
sectionTitle="softDelete Parameters"
/>As of Medusa v2.11.0, MikroORM dependencies are included in the @medusajs/framework package. If you're using an older version of Medusa, change the import statement to @mikro-orm/knex.
import {
InjectTransactionManager,
MedusaContext,
MedusaService,
} from "@medusajs/framework/utils"
import { Context, InferTypeOf, DAL } from "@medusajs/framework/types"
import { EntityManager } from "@medusajs/framework/mikro-orm/knex"
import Post from "./models/post"
class BlogModuleService extends MedusaService({
Post,
}){
// ...
@InjectTransactionManager()
protected async doSomething_(
id: string,
@MedusaContext() sharedContext?: Context<EntityManager>
): Promise<any> {
const [
deletedPosts,
deletedEntities,
] = await this.postRepository_.softDelete(id)
return deletedPosts
}
@InjectManager()
async doSomething(
id: string,
@MedusaContext() sharedContext?: Context<EntityManager>
): Promise<any> {
return await this.doSomething_(id, sharedContext)
}
}
The softDelete method can accept the ID of a record to soft-delete as a string.
The method returns a tuple with two elements:
For example:
[
[
{
"id": "01JSHAW6Z7KW4X6E8MFPGNEKHC",
"title": "My first post",
"content": "This is my first post",
"metadata": null,
"product_id": null,
"product_ids": [
"prod_01JP4M5T5K55P2JN1F17EY7B2T"
],
"author_id": "01JSHAW6YZNKR65TJ242GCMD2S",
"author": "01JSHAW6YZNKR65TJ242GCMD2S",
"created_at": "2025-04-23T12:44:59.751Z",
"updated_at": "2025-04-23T12:44:59.751Z",
"deleted_at": "2025-04-23T12:45:08.750Z"
}
],
{
"Post": [
{
"id": "01JSHAW6Z7KW4X6E8MFPGNEKHC",
"title": "My first post",
"content": "This is my first post",
"metadata": null,
"product_id": null,
"product_ids": [
"prod_01JP4M5T5K55P2JN1F17EY7B2T"
],
"author_id": "01JSHAW6YZNKR65TJ242GCMD2S",
"author": "01JSHAW6YZNKR65TJ242GCMD2S",
"created_at": "2025-04-23T12:44:59.751Z",
"updated_at": "2025-04-23T12:44:59.751Z",
"deleted_at": "2025-04-23T12:45:08.750Z"
}
]
}
]
import {
InjectTransactionManager,
MedusaContext,
MedusaService,
} from "@medusajs/framework/utils"
import { Context, InferTypeOf, DAL } from "@medusajs/framework/types"
import { EntityManager } from "@medusajs/framework/mikro-orm/knex"
import Post from "./models/post"
class BlogModuleService extends MedusaService({
Post,
}){
// ...
@InjectTransactionManager()
protected async doSomething_(
ids: string[],
@MedusaContext() sharedContext?: Context<EntityManager>
): Promise<any> {
const [
deletedPosts,
deletedEntities,
] = await this.postRepository_.softDelete(ids)
return deletedPosts
}
@InjectManager()
async doSomething(
ids: string[],
@MedusaContext() sharedContext?: Context<EntityManager>
): Promise<any> {
return await this.doSomething_(ids, sharedContext)
}
}
The softDelete method can accept an array of record IDs to soft-delete.
The method returns a tuple with two elements:
For example:
[
[
{
"id": "01JSHAW6Z7KW4X6E8MFPGNEKHC",
"title": "My first post",
"content": "This is my first post",
"metadata": null,
"product_id": null,
"product_ids": [
"prod_01JP4M5T5K55P2JN1F17EY7B2T"
],
"author_id": "01JSHAW6YZNKR65TJ242GCMD2S",
"author": "01JSHAW6YZNKR65TJ242GCMD2S",
"created_at": "2025-04-23T12:44:59.751Z",
"updated_at": "2025-04-23T12:44:59.751Z",
"deleted_at": "2025-04-23T12:45:08.750Z"
}
],
{
"Post": [
{
"id": "01JSHAW6Z7KW4X6E8MFPGNEKHC",
"title": "My first post",
"content": "This is my first post",
"metadata": null,
"product_id": null,
"product_ids": [
"prod_01JP4M5T5K55P2JN1F17EY7B2T"
],
"author_id": "01JSHAW6YZNKR65TJ242GCMD2S",
"author": "01JSHAW6YZNKR65TJ242GCMD2S",
"created_at": "2025-04-23T12:44:59.751Z",
"updated_at": "2025-04-23T12:44:59.751Z",
"deleted_at": "2025-04-23T12:45:08.750Z"
}
]
}
]
import {
InjectTransactionManager,
MedusaContext,
MedusaService,
} from "@medusajs/framework/utils"
import { Context, InferTypeOf, DAL } from "@medusajs/framework/types"
import { EntityManager } from "@medusajs/framework/mikro-orm/knex"
import Post from "./models/post"
class BlogModuleService extends MedusaService({
Post,
}){
// ...
@InjectTransactionManager()
protected async doSomething_(
id: string,
@MedusaContext() sharedContext?: Context<EntityManager>
): Promise<any> {
const [
deletedPosts,
deletedEntities,
] = await this.postRepository_.softDelete({
title: "My Post",
})
return deletedPosts
}
@InjectManager()
async doSomething(
ids: string[],
@MedusaContext() sharedContext?: Context<EntityManager>
): Promise<any> {
return await this.doSomething_(ids, sharedContext)
}
}
The softDelete method can accept an object of filters to select the records to soft-delete.
In the example above, you pass an object with the title property to soft-delete all records with that title.
Find examples of different filters in the Filter Records documentation.
</Note>The method returns a tuple with two elements:
For example:
[
[
{
"id": "01JSHAW6Z7KW4X6E8MFPGNEKHC",
"title": "My first post",
"content": "This is my first post",
"metadata": null,
"product_id": null,
"product_ids": [
"prod_01JP4M5T5K55P2JN1F17EY7B2T"
],
"author_id": "01JSHAW6YZNKR65TJ242GCMD2S",
"author": "01JSHAW6YZNKR65TJ242GCMD2S",
"created_at": "2025-04-23T12:44:59.751Z",
"updated_at": "2025-04-23T12:44:59.751Z",
"deleted_at": "2025-04-23T12:45:08.750Z"
}
],
{
"Post": [
{
"id": "01JSHAW6Z7KW4X6E8MFPGNEKHC",
"title": "My first post",
"content": "This is my first post",
"metadata": null,
"product_id": null,
"product_ids": [
"prod_01JP4M5T5K55P2JN1F17EY7B2T"
],
"author_id": "01JSHAW6YZNKR65TJ242GCMD2S",
"author": "01JSHAW6YZNKR65TJ242GCMD2S",
"created_at": "2025-04-23T12:44:59.751Z",
"updated_at": "2025-04-23T12:44:59.751Z",
"deleted_at": "2025-04-23T12:45:08.750Z"
}
]
}
]