0 Shares 13152 Views

Laravel Soft Delete

This Is How To Do a Laravel Soft Delete

We will talk about a little more specific issue today. We do not want our data in our database to be completely deleted. For this reason, we will talk about  Soft Delete on Laravel.

Note: I will tell the story through the blog article system. I continue the narration, thinking that you are creating a Laravel Project. Lecture design, design, and so on. I will not use things. I will only talk about Soft Delete.

Let’s define a few routes first.

# /routes/api.php
        Route::group(['prefix' => 'blog'], static function () {

            Route::get('all', 'BlogController@all');

            Route::get('list', 'BlogController@list');

            Route::get('only-trashed', 'BlogController@onlyTrashed');

            Route::post('store', 'BlogController@store');

            Route::delete('delete/{id}', 'BlogController@delete');

            Route::patch('restore/{id}', 'BlogController@restore');

        });

 

Primarily we added a prefix named Blog and in it

  • lists
  • List Deleted Only
  • Save
  • Clear
  • Add back

We have defined our operations. Now let’s create one Model and our associated Controller and Migration files.

php artisan make:model Blog -mc

Then let’s define our methods in Controller. After the edits, the Blog Controller should look like this.

<?php

namespace App\Http\Controllers;

use App\Http\Requests\StoreRequest;

class BlogController extends Controller

{

    public function all()

    {

    }

    public function list()

    {

    }

    public function store(StoreRequest $request)

    {

    }

    public function delete(int $id)

    {

    }

    public function restore(int $id)

    {

    }

    public function onlyTrashed()

    {

    }

}

 

Here I made use of FormRequest feature to make control operations comfortable. Those who don’t know can check out my previous article here. Then we edit our migration file and then run it.

<?php

use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;

class CreateBlogsTable extends Migration

{

    /**
     * Run the migrations.
     *
     * @return void
     */

    public function up()

    {

        Schema::create('blogs', function (Blueprint $table) {

            $table->id();

            $table->string('title', 60);

            $table->text('content');

            $table->integer('views', false)->default(0);

            $table->string('author');

            $table->timestamps();

            /**
             * This part is necessary for us to use the soft-delete feature.
             */

            $table->softDeletes();

        });

    }

    /**
     * Reverse the migrations.
     *
     * @return void
     */

    public function down()

    {

        Schema::dropIfExists('blogs');

    }

}

 

The softDeletes method we added here is required to create a column named deleted_at into the blogs table. In this way, we will be able to use our soft-delete feature. Then we update our Model file as follows.

<?php

namespace App;

use Illuminate\Database\Eloquent\Model;
use Illuminate\Database\Eloquent\SoftDeletes;

class Blog extends Model

{

    use SoftDeletes;

    protected $fillable = [

        'title', 'content', 'author'

    ];

}

Here SoftDelete trait will manage the deleted_at column and other features for us. Now let’s fill in the methods we created into the Controller. It should look like this.

<?php

namespace App\Http\Controllers;

use App\Blog;
use App\Http\Requests\{StoreRequest};
use Illuminate\Http\JsonResponse;

class BlogController extends Controller

{

    /**
     * Returns all posts, including those that have been deleted.
     * @return JsonResponse
     */

    public function all()

    {

        /**
         * WithTrashed, we have added the deleted articles to the query.
         */

        $blogs = Blog::withTrashed()->get();

        return response()->json($blogs, 200);

    }

    /**
     * @return JsonResponse
     * Returns all blog posts except deleted ones.
     */

    public function list()

    {

        return response()->json(Blog::all(), 200);

    }

    /**
     * @param StoreRequest $request
     * Saves a new blog post.
     * @return JsonResponse
     */

    public function store(StoreRequest $request)

    {

        $store = [

            'title' => $request->post('title'),

            'content' => $request->post('content'),

            'author' => $request->post('author') ?? "Anonymous",

        ];

        $result = Blog::create($store);

        return response()->json($result, 200);

    }

    /**
     * Deletes a blog post.
     * @param Int $id
     * @return JsonResponse
     */

    public function delete(int $id)

    {

        $blog = Blog::findOrFail($id);

        $blog->delete();

        return response()->json(['deleted_at' => $blog->deleted_at], 200);

    }

    /**
     * Brings back a deleted blog post.
     * @param Int $id
     * @return JsonResponse
     */

    public function restore(int $id)

    {

        /**
         * Find content only among those deleted.
         */

        $blog = Blog::onlyTrashed()->findOrFail($id);

        $blog->restore();

        return response()->json($blog, 200);

    }

    /**
     * It only fetches deleted blog posts.
     */

    public function onlyTrashed()

    {

        /**
         * Here we call onlyTrashed as an extra.
         */

        $blog = Blog::onlyTrashed()->get();

        return response()->json($blog, 200);

    }

}

 

Thus, we have completed our transactions. There are two methods to be aware of here, one of which is withTrashed (). This method allows us to include deleted ones in the query. Another is the onlyTrashed () method we use to fetch only deleted ones. If you want to remove it from your database, you can use forceDelete but I don’t recommend it. Here we come to the end of our article.

Good and Error Free Coding for Everyone :)

free trial cdn

 

You may be interested

The Ultimate CDN (Content Delivery Network) Guide 2022
CDN
3903 views
CDN
3903 views

The Ultimate CDN (Content Delivery Network) Guide 2022

medianova - February 8, 2022

The Ultimate CDN Guide - Everything About Content Delivery Network 2022 You probably know what CDN (Content Delivery Network) stands for. You may also be aware of…

The Essential CDN Glossary
CDN
10371 views
CDN
10371 views

The Essential CDN Glossary

Nadia Benslimane - November 21, 2019

Why Have We Decided To Create a CDN Glossary? Whether you are new to the world of CDN, or have been involved in it for years, there…

API Caching Benefits for E-commerce
CDN
89 views
CDN
89 views

API Caching Benefits for E-commerce

Sıla Saltoğlu - May 9, 2022

The Benefits of API Caching for E-commerce In today's digital age, e-commerce is an essential part of many businesses. Whether we're shopping for clothing, electronics, or even…

How to Use Webinars to Boost Business Growth
How To
130 views
How To
130 views

How to Use Webinars to Boost Business Growth

Sıla Saltoğlu - April 14, 2022

How to Use Webinars for Business Growth  Webinars are seminars organized over the internet and have the potential to reach a wide audience. Of course, the history…

Enhance Live Streaming with 10 Tips
CDN
201 views
CDN
201 views

Enhance Live Streaming with 10 Tips

Sıla Saltoğlu - March 23, 2022

Live Streaming You've come to the correct spot if you're looking for the most efficient way to increase your interactions: Live Streaming. Since its beginning, live streaming…

Most from this category

The Essential CDN Glossary
CDN
10371 views
10371 views

The Essential CDN Glossary

Nadia Benslimane - November 21, 2019
How does Live Commerce Shape E-commerce?
e-commerce
374 views
374 views

How does Live Commerce Shape E-commerce?

Sıla Saltoğlu - March 9, 2022
Cloud Computing Trends for 2022
Cloud
814 views
814 views

Cloud Computing Trends for 2022

Sıla Saltoğlu - February 12, 2022