0 Shares 6692 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
4503 views
CDN
4503 views

The Ultimate CDN (Content Delivery Network) Guide

Nadia Benslimane - August 3, 2020

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

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

How CDN supports the Travel and Hospitality Business
CDN
263 views
CDN
263 views

How CDN supports the Travel and Hospitality Business

Tushar Sonal - July 28, 2021

Travel and Hospitality are making big waves, with people thronging to popular tourist spots in droves as the Covid19 recedes. With this shift towards the online sphere,…

A Story About The Battle of Logging
CDN
287 views
CDN
287 views

A Story About The Battle of Logging

Elif Ak - July 12, 2021

Networking and computing systems generate a deluge of logs in seconds. Analyzing these voluminous logs without human interference plays a crucial role in autonomous management. Just as…

AVIF: All You Need To Know About This New Image File Format
New Features
477 views
New Features
477 views

AVIF: All You Need To Know About This New Image File Format

Nilgün Ünsal - June 25, 2021

AVIF: The New Image Format Today, everyone has thousands of pictures on their phones and computers. In e-commerce or fashion sites, this number reaches up to millions.…

Most from this category