> For the complete documentation index, see [llms.txt](https://quick.ortusbooks.com/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://quick.ortusbooks.com/guide/getting-started/deleting-entities.md).

# Deleting Entities

## delete

You can delete an entity by calling the `delete` method on it.

```javascript
var user = getInstance( "User" ).find( 1 );
user.delete();
```

{% hint style="danger" %}
After a permanent delete, the entity object may still exist in variables even though its database row is gone.
{% endhint %}

## Soft Deletes

Soft deletes replace permanent deletion with a timestamp and automatically exclude deleted rows from normal queries. Enable them with `softDeletes="true"` and declare the timestamp attribute. The default attribute name is `deletedDate`.

```javascript
component
    extends="quick.models.BaseEntity"
    accessors="true"
    softDeletes="true"
{

    property name="id";
    property name="deletedDate" column="deleted_date";

}
```

Use `softDeleteColumn` component metadata when your attribute has another name:

```javascript
component
    extends="quick.models.BaseEntity"
    accessors="true"
    softDeletes="true"
    softDeleteColumn="archivedAt"
{

    property name="archivedAt" column="archived_at";

}
```

Calling `delete()` on a soft-deleting entity updates that timestamp and leaves the entity loaded.

```javascript
var user = getInstance( "User" ).findOrFail( 1 );
user.delete();

user.isTrashed(); // true
```

Normal queries exclude trashed entities. Use `withTrashed()` to include them or `onlyTrashed()` to return only deleted rows.

```javascript
var allUsers = getInstance( "User" ).withTrashed().get();
var deletedUsers = getInstance( "User" ).onlyTrashed().get();
```

Restore a loaded entity by clearing its deletion timestamp:

```javascript
var user = getInstance( "User" )
    .withTrashed()
    .findOrFail( 1 );

user.restore();
```

`restore()` uses the normal update lifecycle. Use `forceDelete()` when the row must be permanently removed.

## deleteAll

Just like `updateAll`, you can delete many records from the database by specifying a query with constraints and then calling the `deleteAll` method.

| Name | Type  | Required | Default | Description                                                                                                                                   |
| ---- | ----- | -------- | ------- | --------------------------------------------------------------------------------------------------------------------------------------------- |
| ids  | array | `false`  | `[]`    | An optional array of ids to add to the previously configured query. The ids will be added to a WHERE IN statement on the primary key columns. |

Deletes matching entities according to the configured query.

```javascript
getInstance( "User" )
    .whereActive( false )
    .deleteAll();
```

Additionally, you can pass in an array of ids to `deleteAll` to delete only those ids. Note that any previously configured constraints will still apply.

```javascript
getInstance( "User" ).deleteAll( [ 4, 10, 22 ] );
```

For soft-deleting entities, `deleteAll()` timestamps matching rows instead of removing them. Bulk restore and permanent deletion are also available:

```javascript
getInstance( "User" )
    .onlyTrashed()
    .whereIn( "id", [ 4, 10, 22 ] )
    .restoreAll();

getInstance( "User" )
    .whereInactive( true )
    .forceDeleteAll();
```

`forceDeleteAll()` also accepts an optional array of ids. Existing query constraints still apply.


---

# Agent Instructions
This documentation is published with GitBook. GitBook is the documentation platform designed so that both humans and AI agents can read, navigate, and reason over technical content effectively. Learn more at gitbook.com.

## Querying This Documentation
If you need additional information that is not directly available in this page, you can query the documentation by asking a question.

Perform an HTTP GET request on the following URL with the `ask` and `goal` query parameters:

```
GET https://quick.ortusbooks.com/guide/getting-started/deleting-entities.md?ask=<question>&goal=<user_goal>
```

`ask` is the immediate question: it should be specific, self-contained, and written in natural language.
`goal` is what the user is ultimately trying to achieve, the reason they need the answer. Sharing it helps GitBook give you a better, more relevant answer. A goal is most helpful when it describes the outcome the user wants rather than restating the question. For example, with `ask=how do I create an API token`, a goal like `automate deployments from our CI pipeline` lets GitBook tailor the answer to that use case.

The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
