Boilerplate Laravel 5 : Membuat Slug dan Soft Delete

slug dan soft delete


Pada tutorial laravel sebelumnya kita sudah membuat notifikasi menggunakan toastr. kali ini kita akan membuat slug dan soft delete. 


Slug yaitu bagian dari URL/permalink website kita yang merujuk pada sebuah konten secara spesifik. Slug ada di bagian belakang dari permalink setelah nama domain. contohnya seperti ini media-info.id/membuat-slug-dan-soft-delete.html


Sedangkan maksud Soft Delete ketika kita menghapus data sebernarnya belum di hapus secara permanen dan bisa di restore kembali. lebih jelasnya silahkan ikuti tutorial ini


Tutorial Sebelumnya - Boilerplate Laravel 4: Membuat Notifikasi dengan Toastr 


Pertama kita menuju folder migrate di dalam database/migration dan pilih file create_posts_table.php dan tambahkan script dibawah.


$table->string('slug');

$table->softDeletes();


Lihat script lengkapnya


<?php

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

class CreatePostsTable extends Migration
{
public function up()
{
Schema::create('posts', function (Blueprint $table) {
$table->increments('id');
$table->string('title');
$table->string('slug');
$table->text('content');
$table->integer('id_category');
$table->string('featured');
$table->softDeletes();
$table->timestamps();

});
}

public function down()
{
Schema::dropIfExists('posts');
}
}


Selanjutnya kita edit file Post.php di dalam folder app 


Post.php


<?php

namespace App;

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

class Post extends Model
{
use SoftDeletes;

protected $fillable = [
"title", "content", "featured", "id_category", "slug"

];

protected $dates = ['deleted_at'];

public function category(){
return $this->belongsTo('App\Category');
}
}


Sebelumnya buka cmd kalian dan jalankan code di bawah


C:xampp\htdocs\blog>php artisan migrate:refresh


Silahkan cek di tabel posts maka akan ada perubahan seperti gambar dibawah.


soft deletes

Setelah itu kita edit file PostsController.php di dalam folder app/Http/Controllers untuk menambahkan script slugnya.


PostsController.php 


<?php

namespace App\Http\Controllers;

use Session;
use App\Post;
use App\Category;
use Illuminate\Http\Request;

class PostsController extends Controller
{

public function index()
{
return view('admin.posts.index')->with('posts', Post::all());
}

public function create()
{
$categories = Category::all();

if($categories->count() == 0){
Session::flash('info', 'category nothing');
return redirect()->back();
}

return view('admin.posts.create')->with('categories', $categories);
}

public function store(Request $request)
{
$this->validate($request, [
"title" => "required",
"featured" => "required|image",
"content" => "required",
"id_category" => "required"
]);

$featured = $request->featured;
$featured_new_name = time().str_replace(' ','-',$featured->getClientOriginalName());
$featured->move('uploads', $featured_new_name);

$post = Post::create([
"title" => $request->title,
"content" => $request->content,
"featured" => "uploads/" . $featured_new_name,
"id_category" => $request->id_category,
"slug" => str_slug($request->title)
]);

Session::flash('success', 'save success');

return redirect()->route('posts');
}

public function show($id)
{

}

public function edit($id)
{
$post = Post::find($id);

return view('admin.posts.edit')->with('post', $post)->with('categories', Category::all());
}

public function update(Request $request, $id)
{
$this->validate($request, [
"title" => "required",
"content" => "required",
"id_category" => "required"
]);

$post = Post::find($id);

if($request->hasFile('featured')){

File::delete($post->featured);

$featured = $request->featured;

$featured_new_name = time().str_replace(' ','-',$featured->getClientOriginalName());
$featured->move('uploads', $featured_new_name);

$post->featured = "uploads/".$featured_new_name ;


}

$post->title = $request->title;
$post->content = $request->content;
$post->id_category = $request->id_category;
$post->slug = str_slug($request->title);
$post->save();

Session::flash('success', 'update success');

return redirect()->route('posts');
}

public function destroy($id)
{
$post = Post::find($id);
//File::delete($post->featured);
$post->delete();

Session::flash('success', 'delete success');

return redirect()->route('posts');
}
}


Setelah selesai coba jalankan dan input post 

slug

dan lihat di database maka slug akan terisi


slug

Setelah itu coba hapus 


soft delete

soft deletes


maka tidak ada data yg di tampilkan, coba kalian cek di database 


soft delete

ternyata data masih ada dan terlihat field deleted_at terisi. 


Sekian untuk tutorial Membuat Slug dan Soft Delete kali ini, semoga bermanfaat.


Tutorial Selanjutnya - Boilerplate Laravel 6 : Restore Dan Delete Permanent

LihatTutupKomentar