Download Laravel App
composer create-project --prefer-dist laravel/laravel my-app
C:\xampp\htdocs\laravel>composer create-project --prefer-dist laravel/laravel my-app
Connecting our Database
open .env file root directory.
DB_CONNECTION=mysql
DB_HOST=127.0.0.1
DB_PORT=3306
DB_DATABASE=laraveldb
DB_USERNAME=root
DB_PASSWORD=
Create Controller UserController
php artisan make:controller UserController
C:\xampp\htdocs\laravel\my-app>php artisan make:controller UserController
app\Http\Controllers\UserController.php
//app\Http\Controllers\UserController.php <?php namespace App\Http\Controllers; use Illuminate\Http\Request; use App\Models\User; class UserController extends Controller { public function index(){ $users=User::all(); return view('user',compact('users')); } public function softDelete($id){ User::find($id)->delete(); return back(); } public function trashed(){ $users = User::onlyTrashed()->get(); return view('trashed',compact('users')); } public function restore($id){ User::whereId($id)->restore(); return back(); } public function restoreAll(){ User::onlyTrashed()->restore(); return back(); } public function forceDelete($id){ User::find($id)->forceDelete(); return back(); } }Database Migration
database/migrations/create_users_table.php
//database/migrations/create_users_table.php <?php use Illuminate\Database\Migrations\Migration; use Illuminate\Database\Schema\Blueprint; use Illuminate\Support\Facades\Schema; return new class extends Migration { public function up() { Schema::create('users', function (Blueprint $table) { $table->id(); $table->string('name'); $table->string('email')->unique(); $table->timestamp('email_verified_at')->nullable(); $table->string('password'); $table->timestamp('deleted_at')->nullable(); //add deleted_at $table->rememberToken(); $table->timestamps(); }); } public function down() { Schema::dropIfExists('users'); } };run this migration
C:\xampp\htdocs\laravel\my-app>php artisan migrate
php artisan tinker
User::factory()->count(100)->create()
C:\xampp\htdocs\laravel9\blog>php artisan tinker
Psy Shell v0.11.1 (PHP 8.0.13 — cli) by Justin Hileman
>>> User::factory()->count(20)->create()
[!] Aliasing 'User' to 'App\Models\User' for this Tinker session.
check database table user 100 dummy records added
Bootstrap 5
https://getbootstrap.com/docs/5.0/getting-started/introduction/
https://cdn.jsdelivr.net/npm/bootstrap@5.0.2/dist/css/bootstrap.min.css
resources/views/user.blade.php
//resources/views/user.blade.php <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <meta http-equiv="X-UA-Compatible" content="ie=edge"> <title>Laravel Soft Deletes - Restore Records, Force Delete, Fetch Deleted Records and Soft Delete</title> <link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/bootstrap@5.0.2/dist/css/bootstrap.min.css" /> <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.2.0/css/all.min.css" integrity="sha512-xh6O/CkQoPOWDdYTDqeRdPCVd1SpvCA9XXcUnZS2FmJNp1coAFzvtCN9BmamE+4aHK8yyUHUSCcJHgXloTyT2A==" crossorigin="anonymous" referrerpolicy="no-referrer" /> <link rel="stylesheet" href="https://cdn.datatables.net/1.13.4/css/jquery.dataTables.min.css" /> </head> <body> <div class="container"> <h1 class="text-center text-success pt-4">Laravel Soft Deletes - Restore Records, Force Delete, Fetch Deleted Records and Soft Delete</h1> <hr> <div class="row py-2"> <div class="col-md-6"> <h2>List of Users</h3> </div> <div class="col-md-6"> <div class="form-group"> <b><a class="btn btn-default m-2" href="/"><i class="fa fa-thin fa-newspaper"></i> List of Users</a> <a class="btn btn-default m-2" href="trashed"> <i class="fa fa-duotone fa-trash"></i> Trashed</a></b> </div> </div> </div> <table id="example" class="table table-bordered table-hover display"> <thead> <tr> <th scope="col">ID</th> <th scope="col">Name</th> <th scope="col">Email</th> <th scope="col">Soft Delete</th> <th scope="col">Force Delete</th> </tr> </thead> <tbody> @foreach ($users as $rs) <tr> <th scope="row">{{$rs->id}}</th> <td>{{$rs->name}}</td> <td>{{$rs->email}}</td> <td ><a href="softDelete/{{$rs->id}}" class="text-warning btn"><i class="fa fa-solid fa-trash"></i> Delete</a></td> <td ><a href="forceDelete/{{$rs->id}}" class="text-danger btn"><i class="fa fa-solid fa-trash"></i> Forever</a></td> </tr> @endforeach </tbody> </table> </div> <script src="https://code.jquery.com/jquery-3.5.1.js"></script> <script src="https://cdn.datatables.net/1.13.4/js/jquery.dataTables.min.js"></script> <script> $(document).ready(function () { $('#example').DataTable(); }); </script> </body> </html>resources/views/trashed.blade.php
//resources/views/trashed.blade.php <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <meta http-equiv="X-UA-Compatible" content="ie=edge"> <title>Laravel Soft Deletes - Restore Records, Force Delete, Fetch Deleted Records and Soft Delete</title> <link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/bootstrap@5.0.2/dist/css/bootstrap.min.css" /> <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.2.0/css/all.min.css" integrity="sha512-xh6O/CkQoPOWDdYTDqeRdPCVd1SpvCA9XXcUnZS2FmJNp1coAFzvtCN9BmamE+4aHK8yyUHUSCcJHgXloTyT2A==" crossorigin="anonymous" referrerpolicy="no-referrer" /> <link rel="stylesheet" href="https://cdn.datatables.net/1.13.4/css/jquery.dataTables.min.css" /> </head> <body> <div class="container"> <h1 class="text-center text-success pt-4">Laravel Soft Deletes - Restore Records, Force Delete, Fetch Deleted Records and Soft Delete</h1> <hr> <div class="row py-2"> <div class="col-md-6"> <h2>Restore Deleted Users</h3> </div> <div class="col-md-6"> <div class="form-group"> <b><a class="btn btn-default m-2" href="/"><i class="fa fa-thin fa-newspaper"></i> List of Users</a> <a class="btn btn-default m-2" href="trashed"> <i class="fa fa-duotone fa-trash"></i> Trashed</a></b> </div> </div> </div> <h3><a class="btn btn-success" href="/restore-all"><i class="fa fa-sharp fa-solid fa-trash-arrow-up"></i> Restore All</a></h3> <table id="example" class="table table-bordered table-hover display"> <thead> <tr> <th scope="col">ID</th> <th scope="col">Name</th> <th scope="col">Email</th> <th scope="col">Restore</th> </tr> </thead> <tbody> @foreach ($users as $rs) <tr> <th scope="row">{{$rs->id}}</th> <td>{{$rs->name}}</td> <td>{{$rs->email}}</td> <td><a href="restore/{{$rs->id}}" class="text-primary btn"><i class="fa fa-sharp fa-solid fa-trash-arrow-up"></i></a></td> </tr> @endforeach </tbody> </table> </div> <script src="https://code.jquery.com/jquery-3.5.1.js"></script> <script src="https://cdn.datatables.net/1.13.4/js/jquery.dataTables.min.js"></script> <script> $(document).ready(function () { $('#example').DataTable(); }); </script> </body> </html>Model User
app/models/User.php
//app/models/User.php <?php namespace App\Models; // use Illuminate\Contracts\Auth\MustVerifyEmail; use Illuminate\Database\Eloquent\Factories\HasFactory; use Illuminate\Foundation\Auth\User as Authenticatable; use Illuminate\Notifications\Notifiable; use Laravel\Sanctum\HasApiTokens; use Illuminate\Database\Eloquent\SoftDeletes; class User extends Authenticatable { use HasApiTokens, HasFactory, Notifiable, SoftDeletes; //add SoftDeletes protected $fillable = [ 'name', 'email', 'password', ]; protected $hidden = [ 'password', 'remember_token', ]; protected $casts = [ 'email_verified_at' => 'datetime', ]; }Routes
routes/web.php
//routes/web.php <?php use Illuminate\Support\Facades\Route; use App\Http\Controllers\UserController; //Route::get('/', function () { // return view('welcome'); //}); Route::get('/',[UserController::class,'index']); Route::get('/softDelete/{id}',[UserController::class,'softDelete']); Route::get('forceDelete/{id}',[UserController::class,'forceDelete']); Route::get('trashed',[UserController::class,'trashed']); Route::get('restore/{id}',[UserController::class,'restore']); Route::get('restore-all',[UserController::class,'restoreAll']);Run C:\xampp\htdocs\laravel\my-app>php artisan serve
Starting Laravel development server: http://127.0.0.1:8000