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.

Privacy Preference Center

Necessary

Necessary cookies help make a website usable by enabling basic functions like page navigation and access to secure areas of the website. The website cannot function properly without these cookies.

PHPSESSID - Preserves user session state across page requests.

gdpr[consent_types] - Used to store user consents.

gdpr[allowed_cookies] - Used to store user allowed cookies.

PHPSESSID, gdpr[consent_types], gdpr[allowed_cookies]
PHPSESSID
WHMCSpKDlPzh2chML

Statistics

Statistic cookies help website owners to understand how visitors interact with websites by collecting and reporting information anonymously.

_ga - Preserves user session state across page requests.

_gat - Used by Google Analytics to throttle request rate

_gid - Registers a unique ID that is used to generate statistical data on how you use the website.

smartlookCookie - Used to collect user device and location information of the site visitors to improve the websites User Experience.

_ga, _gat, _gid
_ga, _gat, _gid
smartlookCookie
_clck, _clsk, CLID, ANONCHK, MR, MUID, SM

Marketing

Marketing cookies are used to track visitors across websites. The intention is to display ads that are relevant and engaging for the individual user and thereby more valuable for publishers and third party advertisers.

IDE - Used by Google DoubleClick to register and report the website user's actions after viewing or clicking one of the advertiser's ads with the purpose of measuring the efficacy of an ad and to present targeted ads to the user.

test_cookie - Used to check if the user's browser supports cookies.

1P_JAR - Google cookie. These cookies are used to collect website statistics and track conversion rates.

NID - Registers a unique ID that identifies a returning user's device. The ID is used for serving ads that are most relevant to the user.

DV - Google ad personalisation

_reb2bgeo - The visitor's geographical location

_reb2bloaded - Whether or not the script loaded for the visitor

_reb2bref - The referring URL for the visit

_reb2bsessionID - The visitor's RB2B session ID

_reb2buid - The visitor's RB2B user ID

IDE, test_cookie, 1P_JAR, NID, DV, NID
IDE, test_cookie
1P_JAR, NID, DV
NID
hblid
_reb2bgeo, _reb2bloaded, _reb2bref, _reb2bsessionID, _reb2buid

Security

These are essential site cookies, used by the google reCAPTCHA. These cookies use an unique identifier to verify if a visitor is human or a bot.

SID, APISID, HSID, NID, PREF
SID, APISID, HSID, NID, PREF