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.
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
dan lihat di database maka slug akan terisi
Setelah itu coba hapus
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