How to Create a Trashed Entry on Laravel
I was looking at the documentation for laravel as I am learning this framework. One cool thing I saw is how to modify the database for trashed elements. Here are the steps to get started
I was looking at the documentation for laravel as I am learning this framework. One cool thing I saw is how to modify the database for trashed elements. Here are the steps to get started
First, we must run a command to create the migration table for the table you need. In this scenario, we are doing it on the posts table
php artisan make:migration add_soft_delete_to_posts_table --table=posts
After that, you will see a new migration we will modify it to look like this.
class AddSoftDeleteToPostsTable extends Migration
{
/**
* Run the migrations.
*
* @return void
*/
public function up()
{
Schema::table('posts', function (Blueprint $table) {
$table->softDeletes();
});
}
/**
* Reverse the migrations.
*
* @return void
*/
public function down()
{
Schema::table('posts', function (Blueprint $table) {
//
$table->dropSoftDeletes();
});
}
}
In our models, we will adjust it to add the soft deletes.
<?php
namespace AppModels;
use Illuminate\Database\Eloquent\Factories\HasFactory;
use Illuminate\Database\EloquentModel;
use Illuminate\Database\EloquentSoftDeletes;
class Post extends Model
{
use HasFactory;
use SoftDeletes;
protected $fillable = [
'title', 'description', 'content', 'image', 'published_at'
];
}
In our controller we will use the following
public function destroy($id)
{
//
$post = Post::withTrashed()->where('id', $id)->firstorFail();
if($post->trashed()){
$post->forceDelete();
} else {
$post->delete();
}
session()->flash('success', 'Deleted Successfully.');
return redirect(route('posts.index'));
}