Soft Deletes in Laravel: Master the Technique in 7 Easy Steps

Have you ever accidentally deleted important data in your Laravel application? Data loss can be a nightmare, leading to frustrated users and wasted development time. Thankfully, Laravel offers a powerful solution: soft deletes.

Soft deletes allow you to mark records as “deleted” without permanently erasing them from the database. This provides a safety net, giving you the ability to recover accidentally deleted data or implement features like shopping carts and temporary inactivations.

This comprehensive guide includes a step-by-step procedure followed by the top-notch Laravel development services provider, ensuring we walk you through everything you need to know about soft deletes in Laravel. We’ll cover the benefits of using soft deletes, how to implement them in your models, and explore various use cases to improve your Laravel application’s functionality.

What are Soft Deletes in Laravel?

In Laravel, soft deletes offer a mechanism for managing data deletion without permanently removing records from your database. Instead of executing a traditional “DELETE” query, soft deletes add a timestamp to a selected column (commonly named deleted_at) within the affected record. This flag marks the data as logically deleted, hiding it from regular queries.

  • Prevents Accidental Data Loss. Soft deletes act as a safety net. If a record is mistakenly deleted, it can be recovered from the database since the data itself remains intact.
  • Maintains Database Integrity. By not physically removing data, soft deletes help preserve referential integrity within your database. This ensures that related tables don’t suffer from missing or orphaned entries.
  • Flexible Data Management. Soft deletes enable you to implement functionalities like shopping carts. It is where users can add and remove items without permanent deletion. Besides, you can create temporary account suspensions without losing user data entirely.

Thus, soft deletes provide a valuable layer of control and flexibility for managing data deletions within your Laravel application. They safeguard against accidental data loss. It also upholds database integrity and opens doors for innovative features that improve user experience.

Why Use Soft Deletes in Laravel?

Laravel’s built-in soft delete functionality offers a sophisticated approach to data management, moving beyond the traditional “DELETE” query. Instead of permanently erasing data, soft deletes introduce a flag within the database record itself.

This flag, stored in a column named deleted_at, acts as a timestamp marking the record as logically deleted. The actual data remains intact but hidden from standard database queries. This approach provides numerous advantages for one working with Laravel applications.

  • Improve Data Recovery. Soft deletes streamline data recovery efforts. By removing the deleted_at timestamp, you can easily restore a logically deleted record to its active state. This prevents the need for complex data backups or restorations.
  • Data Security and Compliance. Soft deletes can be useful in scenarios where data retention policies or regulations are in place. By keeping logically deleted data readily available for a set period. With this, you can ensure compliance with auditing requirements or provide a window for legal discovery if necessary.
  • Implements Flexible Features. Soft deletes enable the creation of features like shopping carts or user account suspensions. Users can add and remove items from a shopping cart without permanent deletion. These accounts can even be temporarily deactivated while preserving user data.

Thus, soft deletes provide a powerful and versatile approach to data management in Laravel applications. It offers a balance between data security and the ability to recover from errors or implement specific application features.

For a successful implementation of Laravel soft deletes, consider partnering with experienced Laravel developers. These professionals can ensure a smooth integration and provide ongoing support to optimize your application’s performance.

How to Use Soft Deletes in Laravel?

Now that we understand the benefits of soft deletes, let’s dive into the practical steps for implementing them in your Laravel application. This process can be broken down into several key steps:

Step 1: Prepare the Database

The first step in implementing soft deletes involves making adjustments to your database schema. Here’s what you need to do:

1. Add the deleted_at Column. Using a migration, add a new column named deleted_at to the table where you want to enable soft deletes. This column will be of type datetime or timestamp and will store the timestamp of when a record is deleted.

Schema::table('your_table_name', function (Blueprint $table) {

Alternatively, you can manually add the column using a separate migration or SQL query.

2. Laravel Migration Helper. Laravel provides a convenient helper method softDeletes() within your migrations. This method adds the deleted_at column with the appropriate data type and sets it to be nullable.

3. Consider Custom Column Names (Optional). By default, Laravel uses deleted_at for the soft delete column. If you prefer a different name, you can specify it within the softDeletes method call like this:

Schema::table('your_table_name', function (Blueprint $table) {

Remember to migrate your database schema after making these changes. This will ensure the deleted_at column is added to your table. Once you’ve prepared your database, you’re ready to enable soft deletes within your Laravel models.

Step 2: Enable Soft Deletes in the Model

With the database prepared, it’s time to configure your Laravel models to leverage soft deletes. Here’s how:

1. Include the SoftDeletes Trait. The core functionality for soft deletes resides in Laravel’s SoftDeletes trait. Add this trait to your model class using the use statement at the beginning.

namespace App\Models;
use Illuminate\Database\Eloquent\Model;
use Illuminate\Database\Eloquent\SoftDeletes;
class YourModel extends Model
    use SoftDeletes;
    // ... rest of your model code

2. Automatic Management of deleted_at Column. By including the SoftDeletes trait, Laravel handles the deleted_at column. The trait automatically casts the column to a DateTime or Carbon instance. This provides helper methods for working with soft deleted data.

3. No Code Changes Required for Soft Deletion. Including the SoftDeletes trait is all that’s necessary for enabling soft deletes. The trait blocks the default delete() method on your model. Then modifies it to update the deleted_at column with the current timestamp instead of permanently removing the record.

Once you’ve incorporated the SoftDeletes trait, your model is equipped to manage soft deletes in an effective manner. This paves the way for using soft delete functionalities within your Laravel application.

Step 3: Soft Delete a Model

Now that your model is configured for soft deletes, let’s see how to soft delete a model instance. The process is very similar to a traditional delete:

1. Use the delete() Method. The process of soft deleting a model remains very similar to a traditional hard delete. You can use the model instance’s delete() method as usual.

$user = User::find(1);

2. deleted_at Column Updated. When you call delete() on a model with soft deletes enabled, Laravel will block this action. Instead of permanently removing the record, Laravel will update the deleted_at column with the current timestamp. This marks the record as deleted in a logical way.

3. Model Instance Still Accessible (Optional). Even after soft deletion, the model instance called delete() remains accessible in your code. This can be useful in certain scenarios, such as retrieving information from the model before it’s removed from the database (covered in a later step).

Remember, soft deletion doesn’t physically remove the data from your database. The record is still there but hidden from standard queries. We’ll explore how to retrieve and restore soft deleted data in the following steps.

Step 4: Retrieve Records

By default, Laravel’s Eloquent queries exclude soft-deleted records. This ensures your application primarily works with active data. However, there are scenarios where you might need to retrieve both active and soft-deleted records. Here’s how to achieve that:

1. Retrieve Active Records (Default). Standard Eloquent queries will automatically exclude soft-deleted records. This means you don’t need to make any special modifications to your queries to fetch only active data.

$activeUsers = User::all(); // Retrieves only active users

2. Include Soft-Deleted Records. To retrieve both active and soft-deleted records, you can use the withTrashed() method on your Laravel Eloquent query builder.

$allUsers = User::withTrashed()->get(); // Retrieves all users, including soft-deleted ones

3. Filtering Soft-Deleted Records (Optional). Indeed, withTrashed() retrieves all records. Yet, you can still combine them with other query filters to target specific soft-deleted data.

$softDeletedUsers = User::withTrashed()->where('deleted_at', '>', Carbon::now()->subWeek())->get(); // Retrieves soft-deleted users deleted within the last week

Using these techniques, you can control which records are retrieved by your Laravel queries. With it, you can consider both active and soft-deleted data as needed. We’ll explore how to recover soft-deleted data in the next step.

Step 5: Recover Soft Deleted Records (Optional)

Soft deletes provide a safe space by allowing you to recover accidentally deleted or logically hidden data. Here’s how to restore a soft-deleted record in Laravel:

1. Use the restore() Method. The restore() method on your model instance reinstates a soft-deleted record. This removes the record’s deleted_at timestamp, making it visible and usable again in your application.

$user = User::withTrashed()->find(1);

2. deleted_at Column Set to Null. When you call restore(), Laravel sets the deleted_at column back to null for the affected record. This removes the soft deletion flag, making the data visible in standard Eloquent queries again.

3. Data Recovery vs Permanent Deletion. It’s important to remember that soft deletes don’t guarantee indefinite data retention. While recovering soft-deleted records is straightforward, you might have separate mechanisms for permanent data deletion.

It’s important to note that this step is optional. Soft-deleted records can remain in your database for any period you deem necessary. We’ll cover permanent deletion as an alternative in the next step.

Step 6: Restore a Soft Deleted Model

Building upon the concept of recovering soft-deleted records, this step focuses on restoring a specific soft-deleted model instance in Laravel.

1. Locate the Soft-Deleted Model. The first step involves identifying the model instance you want to restore. You can use the withTrashed() method on your Eloquent query builder to retrieve soft-deleted records and then filter them based on your criteria (e.g., ID, name, etc.).

$user = User::withTrashed()->find(1);
// Alternatively, filter by other criteria

2. Use the restore() Method. Once you have the soft-deleted model instance, call the restore() method on it. This method removes the deleted_at timestamp associated with the record.


3. Model Becomes Active Again. After calling restore(), the model is no longer considered logically deleted. The deleted_at column becomes null, and the record is again accessible through standard Eloquent queries. It’s now visible and usable within your application logic.

Remember, restoring a soft-deleted model reverses the soft-deletion process. The data is no longer hidden and can be interacted with like any other active record. We’ll explore the concept of permanent deletion as an optional step in the next section.

Step 7: Permanent Deletion (Optional)

While soft deletes offer a safety net, there might be scenarios where permanent data removal is necessary. Here’s how to permanently delete a model instance in Laravel, even if it’s soft-deleted.

1. Use the forceDelete() Method. Laravel provides the forceDelete() method on your model instance for permanent deletion. This method bypasses the soft delete logic and completely removes the record from the database.

$user = User::withTrashed()->find(1);

2. Data Recovery Not Possible. Once you call forceDelete(), the record is permanently erased from the database. Unlike soft deletion, there’s no way to recover the data through Laravel’s Eloquent functionalities.

3. Use with Caution. Permanent deletion is an irreversible action. Use forceDelete() precisely, making sure you intend to remove the data permanently. Consider implementing backups or archiving mechanisms for essential data before using this method.

By understanding permanent deletion, you can manage your database storage and ensure compliance with data retention policies. Remember, soft deletes offer a safety net, but permanent deletion provides a way to remove data definitively when necessary.

Take your Laravel development to the next level with our services.

What are Some Other Uses of Soft Deletes in Laravel?

Laravel soft deletes offer a powerful tool for managing data beyond basic deletion functionality. Here are some additional valuable applications of soft deletes in Laravel applications:

1. Audit Trails

Soft deletes can be instrumental in maintaining a log of data changes. By keeping soft-deleted records along with their deleted_at timestamps, you can create a detailed audit trail. This allows you to track who deleted a record when it was deleted, and why it was deleted. It stores a reason alongside the deleted_at timestamp.

2. Temporary Inactivation

Soft deletes are ideal for scenarios where you need to temporarily deactivate user accounts, products, or other data entities. You can remove it from public view or functionality by soft deleting a record. Moreover, you can still preserve the data for potential future reactivation or reference.

3. Data Retention Policies

Soft deletes can help adhere to data retention policies or regulations. By keeping soft-deleted records for a specific period, you can ensure compliance with legal requirements before permanently deleting the data.

4. Shopping Carts and Checkouts

Soft deletes play a vital role in implementing shopping cart functionality. Users can add and remove items from their carts without permanently deleting the data from the database. Soft-deleted cart items can be easily identified and removed during the checkout process.

5. Undo Functionality

Soft deletes can be leveraged to create undo functionality within your application. If a user accidentally deletes data, you can provide an “undo” option that essentially restores the soft-deleted record. This enhances user experience by offering a safety net against accidental data loss.

These are just a few examples of how soft deletes can extend the functionality and flexibility of your Laravel applications. By using soft deletes, you can enhance data management and ensure compliance with various requirements. To unlock the full potential of soft deletes, consider partnering with Laravel development experts. Their expertise can help you design and implement data management tailored to your needs.

FAQs About Soft Deletes in Laravel

How do Soft Deletes differ from Hard Deletes in Laravel?
Soft Deletes in Laravel involves marking records as "deleted" without removing them from the database. This benefits in data recovery and historical tracking. In contrast, hard deletes permanently remove records from the database, making them irrecoverable.
Are Soft Deletes reversible in Laravel?
Yes, Soft Deletes are reversible in Laravel. By utilizing Laravel's built-in functionality, you can restore soft-deleted records easily, ensuring data integrity and flexibility in managing deleted data.
What are some best practices for managing Soft Deletes in Laravel?
  • Consider permanent deletion policies. Establish a strategy for how long to retain soft-deleted data before permanent removal.
  • Communicate soft deletion behavior. Inform users about soft deletion functionality and how to recover accidentally deleted items.
  • Use withTrashed() precisely. While withTrashed() is useful for retrieving soft-deleted data, avoid using it in all queries to optimize performance.


Soft deletes provide a powerful and versatile approach to data management in Laravel applications. It offers a safety net by preventing accidental permanent data loss, while also allowing for tracking and flexible data handling. By following the steps outlined in this guide, you can effectively implement soft deletes in your Laravel projects.

This approach not only safeguards your data but also streamlines workflows and enhances the overall user experience. For a seamless implementation within your Laravel application, consider partnering with industry experts. Their knowledge and expertise can help you design and integrate tailored data management solutions.

Looking to leverage soft deletes for your Laravel project? Let our skilled Laravel developers assist you.

Boost your Laravel projects with our expertise.

Mayur Upadhyay is a tech professional with expertise in Shopify, WordPress, Drupal, Frameworks, jQuery, and more. With a proven track record in web development and eCommerce development.

Leave a comment