0 Shares 1679 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
CDN
2571 views
CDN
2571 views

The Ultimate CDN (Content Delivery Network) Guide

Nadia Benslimane - August 3, 2020

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

The Essential CDN Glossary
CDN
8269 views
CDN
8269 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…

Live Streaming In E-commerce: Could It Be The Future of Retail?
e-commerce
571 views
e-commerce
571 views

Live Streaming In E-commerce: Could It Be The Future of Retail?

Tushar Sonal - November 6, 2020

E-commerce and Live Streaming: Where is the meeting point? Over the past decade, significant disruption has rolled-out transformative changes in retail and e-commerce. An interesting example is…

Black Friday 2020 and Covid-19: How Is The Game Changing?
e-commerce
1136 views1
e-commerce
1136 views1

Black Friday 2020 and Covid-19: How Is The Game Changing?

Tushar Sonal - October 21, 2020

How Is Covid-19 Going To Impact Black Friday 2020? Black Friday is around the corner again. It is a much-awaited festival for shopping enthusiasts and brands chasing…

Coronavirus and OTT: What Is The Current Situation?
CDN
990 views
CDN
990 views

Coronavirus and OTT: What Is The Current Situation?

Tushar Sonal - October 13, 2020

The Repercussions of Coronavirus on OTT Industry The OTT industry has significantly transformed how people have been used to consuming media content. In the 2000s, the explosion…

Most from this category