Bobcares

Understanding Laravel Soft Delete and restore() Errors

by | Mar 12, 2025

Learn to use Laravel Soft Delete and Restore() to avoid errors. Our Laravel Support team is here to answer your questions and concerns.

Understanding Laravel Soft Delete and Restore() Errors

Understanding Laravel Soft Delete and Restore() ErrorsWhen we delete a row from a database, it’s usually gone forever. We can recover the deleted data with a full database restore, which can be a long process.

That’s where soft deletes come in handy. Instead of permanently removing data, soft deletes flag the row as deleted while keeping it in the database. This lets us to easily view and restore data with minimal effort, saving valuable time when accidental deletions happen.

Benefits of Soft Deletes

  • With soft deletes, data isn’t permanently erased. A simple restore command brings back “deleted” records without complex database operations.
  • Rows are linked to other data — for instance, posts linked to a user. If a user account is deleted, we may still need their posts for historical records or reporting. Soft deletes keep those relationships intact.
  • Even if data is hidden from active use, soft deletes ensure you can still pull historical reports and maintain a full audit trail.

Laravel makes soft deleting simple with the `Illuminate\Database\Eloquent\SoftDeletes` trait. It can be considered like adding an “active” column to a model — if set to `1`, the data is visible, but when set to `0`, it’s hidden without being truly deleted.

How to Enable Soft Deletes

  1. First, add the `SoftDeletes` trait to the model:

    use Illuminate\Database\Eloquent\SoftDeletes;
    class Post extends Model
    {
    use SoftDeletes;
    protected $dates = ['deleted_at'];
    }

  2. Then, update the migration to include a `deleted_at` column:

    $table→softDeletes();

  3. Next, run the migration:

    php artisan migrate

How to Restore Soft Deleted Models

By default, Laravel doesn’t return trashed records when using model queries. To include them, we can use the `withTrashed()` method:

Post::withTrashed()→find($post_id)→restore();

Or, if we only want to search through trashed records:

Post::onlyTrashed()->where('id', $post_id)→restore();

How to Handle Routes and Controllers

If we want to allow restoring models through routes, use the `withTrashed()` method to enable model binding:

Route:

Route::post('restore/{exampleModel}', [ExampleController::class, 'restore'])→withTrashed();

Controller:

public function restore(ExampleModel $exampleModel)
{
$exampleModel->restore();
}

How to Solve Common Restore Error

One common issue arises when we try to restore a non-trashed model or forget to include soft delete checks.

If we are getting a `$model is a non-object` error, ensure we use `onlyTrashed()` or `withTrashed()` correctly:


$course = Course::onlyTrashed()->find($courseId);
if ($course) {
$course->restore();
return redirect('/dashboard/courses/recycle')->with('success', 'Course has been restored');
}
return back()->with('error', 'Course not found or not deleted');

We can also use `firstOrFail()` to throw an exception if the trashed record isn’t found:


$user = Emp::onlyTrashed()->where('id', Input::get('actEmpId'))->firstOrFail();
$user->restore();

[Need assistance with a different issue? Our team is available 24/7.]

Conclusion

Soft deletes are a useful way to protect data from accidental loss, maintain relationships between records, and simplify recovery processes. Laravel’s built-in SoftDeletes makes it easy to implement.

In brief, our Support Experts demonstrated how to use Laravel Soft Delete and Restore () to avoid errors.

0 Comments

Submit a Comment

Your email address will not be published. Required fields are marked *

Never again lose customers to poor
server speed! Let us help you.