Loading...
Tutorial CRUD Laravel 8 untuk Pemula. Seperti pada umumnya, untuk mempelajari hal
baru dari Laravel 8 selalu dimulai dari mempelajari tutorial Create, Read, Update dan Delete
(CRUD).
Melalui artikel ini, kamu akan belajar step by step membuat CRUD Laravel 8 yang simple
dan mudah dipahami.
Selain itu, kamu juga bisa download source code yang tersedia di akhir artikel ini.
Let’s Go!
Daftar Isi
Pengenalan Laravel 8
Taylor Otwell baru saja merilis Laravel 8 pada tanggal 8 September 2020.
Pada versi terbaru ini, Laravel 8 memberikan beberapa fitur baru dan dukungan LTS yang
keren yang perlu kita ketahui. Selengkapnya bisa kamu baca melalui artikel di bawah ini:
Loading...
Baca Juga: Fitur dan Ulasan Laravel 8 yang Wajib Kamu Tahu
Sudah membacanya?
Kalau sudah pasti kamu sudah nggak sabar bagaimana membuat aplikasi dasar seperti insert,
update dan delete di Laravel 8.
Nggak sulit!
… di sini kamu hanya perlu mengikuti beberapa langkah dasar menggunakan controller,
model, route, bootstrap 4 dan blade.
Loading...
Silahkan ketik command di bawah ini untuk menginstall Laravel terlebih dahulu:
Ini adalah cara termudah yang biasa kita lakukan, cukup dengan ketik perintah berikut ini:
Baca Juga:
Loading...
Silahkan aktifkan web server yang kamu gunakan semisal XAMPP, Laragon, MAMP, Nginx
dan lain-lain.
Setelah itu, buka file .env yang ada di dalam direktori blog/.env.
Ubah nama database, root, password dll yang sesuai dengan web server kamu lakukan.
?
1DB_CONNECTION=mysql
2DB_HOST=127.0.0.1
3DB_PORT=3306
4DB_DATABASE=db_laravel8_crud
5DB_USERNAME=root
DB_PASSWORD=
6
?
1DB_CONNECTION=mysql
2DB_HOST=127.0.0.1
3DB_PORT=8889
4DB_DATABASE=db_laravel8_crud
5DB_USERNAME=root
DB_PASSWORD=root
6
Save.
Loading...
Lalu modifikasi skema field table posts dengan kode di bawah ini:
?
1 <?php
2
use Illuminate\Database\Migrations\Migration;
3
use Illuminate\Database\Schema\Blueprint;
4 use Illuminate\Support\Facades\Schema;
5
6 class CreatePostsTable extends Migration
7 {
8 /**
* Run the migrations.
9 *
1 * @return void
0 */
1 public function up()
1 {
Schema::create('posts', function (Blueprint $table) {
1 $table->id();
2 $table->string('title');
1 $table->text('content');
3 $table->timestamps();
});
1 }
4
1 /**
5 * Reverse the migrations.
1 *
6 * @return void
*/
1 public function down()
7 {
1 Schema::dropIfExists('posts');
8 }
1 }
9
2
0
2
1
2
2
2
3
2
4
2
5
2
6
2
7
2
8
2
9
3
0
3
1
3
2
3
3
Jika sudah kita jalankan command di bawah ini agar field yang kita buat akan ter-migrasi ke
database:
Loading...
Loading...
index()
create()
store()
show()
edit()
destroy()
Sekarang kita modifikasi isi file tersebut seperti kode di bawah ini:
?
1 <?php
2
namespace App\Http\Controllers;
3
4
use Illuminate\Http\Request;
5 use App\Models\Post;
6
7 class PostController extends Controller
8 {
9 public function index()
{
1
/// mengambil data terakhir dan pagination 5 list
0 $posts = Post::latest()->paginate(5);
1
1 /// mengirimkan variabel $posts ke halaman views
1 posts/index.blade.php
2 /// include dengan number index
return view('posts.index',compact('posts'))
1 ->with('i', (request()->input('page', 1) - 1) * 5);
3 }
1
4 public function create()
1 {
5 /// menampilkan halaman create
return view('posts.create');
1 }
6
1 public function store(Request $request)
7 {
1 /// membuat validasi untuk title dan content wajib diisi
8 $request->validate([
'title' => 'required',
1 'content' => 'required',
9 ]);
2
0 /// insert setiap request dari form ke dalam database via model
2 /// jika menggunakan metode ini, maka nama field dan nama form
1 harus sama
Post::create($request->all());
2
2 /// redirect jika sukses menyimpan data
2 return redirect()->route('posts.index')
3 ->with('success','Post created successfully.');
2 }
4
2 public function show(Post $post)
{
5 /// dengan menggunakan resource, kita bisa memanfaatkan model
2 sebagai parameter
6 /// berdasarkan id yang dipilih
2 /// href="{{ route('posts.show',$post->id) }}
return view('posts.show',compact('post'));
7 }
2
8 public function edit(Post $post)
2 {
9 /// dengan menggunakan resource, kita bisa memanfaatkan model
3 sebagai parameter
/// berdasarkan id yang dipilih
0 /// href="{{ route('posts.edit',$post->id) }}
3 return view('posts.edit',compact('post'));
1 }
3
2 public function update(Request $request, Post $post)
3 {
/// membuat validasi untuk title dan content wajib diisi
3 $request->validate([
3 'title' => 'required',
4 'content' => 'required',
]);
3
5
/// mengubah data berdasarkan request dan parameter yang
3 dikirimkan
6 $post->update($request->all());
3
7 /// setelah berhasil mengubah data
3 return redirect()->route('posts.index')
->with('success','Post updated successfully');
8 }
3
9 public function destroy(Post $post)
4 {
0 /// melakukan hapus data berdasarkan parameter yang dikirimkan
4 $post->delete();
1
return redirect()->route('posts.index')
4 ->with('success','Post deleted successfully');
2 }
4 }
3
4
4
4
5
4
6
4
7
4
8
4
9
5
0
5
1
5
2
5
3
5
4
5
5
5
6
5
7
5
8
5
9
6
0
6
1
6
2
6
3
6
4
6
5
6
6
6
7
6
8
6
9
7
0
7
1
7
2
7
3
7
4
7
5
7
6
7
7
7
8
7
9
8
0
8
1
8
2
8
3
8
4
Save.
?
1
2
3
4
5 <?php
6
namespace App\Models;
7
8
use Illuminate\Database\Eloquent\Factories\HasFactory;
9 use Illuminate\Database\Eloquent\Model;
1
0 class Post extends Model
1 {
1 use HasFactory;
1
protected $fillable = [
2 'title', 'content'
1 ];
3 }
1
4
1
5
Loading...
?
1use App\Http\Controllers\PostController;
2Route::resource('posts', PostController::class);
Simpan.
template.blade.php
index.blade.php
create.blade.php
show.blade.php
edit.blade.php
Let’s go!
Loading...
?
1
2
3
<!DOCTYPE html>
4 <html>
5 <head>
6 <title>Tutorial CRUD Laravel 8 untuk Pemula - Ilmucoding.com</title>
7 <link rel="stylesheet"
8 href="https://maxcdn.bootstrapcdn.com/bootstrap/4.0.0/css/bootstrap.min.c
ss">
9 </head>
1 <body>
0
1 <div class="container">
1 @yield('content')
1 </div>
2 </body>
1 </html>
3
1
4
1# posts/index.blade.php
?
1 @extends('template')
2
@section('content')
3
<div class="row mt-5 mb-5">
4 <div class="col-lg-12 margin-tb">
5 <div class="float-left">
6 <h2>Tutorial CRUD Laravel 8 untuk Pemula -
7 Ilmucoding.com</h2>
</div>
8 <div class="float-right">
9 <a class="btn btn-success"
1 href="{{ route('posts.create') }}"> Create Post</a>
</div>
0
</div>
1 </div>
1
1 @if ($message = Session::get('success'))
2 <div class="alert alert-success">
1 <p>{{ $message }}</p>
</div>
3 @endif
1
4 <table class="table table-bordered">
1 <tr>
5 <th width="20px" class="text-center">No</th>
1 <th>Title</th>
<th width="280px"class="text-center">Action</th>
6 </tr>
1 @foreach ($posts as $post)
7 <tr>
1 <td class="text-center">{{ ++$i }}</td>
<td>{{ $post->title }}</td>
8 <td class="text-center">
1 <form action="{{ route('posts.destroy',$post->id) }}"
9 method="POST">
2
0 <a class="btn btn-info btn-sm"
2 href="{{ route('posts.show',$post->id) }}">Show</a>
1
<a class="btn btn-primary btn-sm"
2 href="{{ route('posts.edit',$post->id) }}">Edit</a>
2
2 @csrf
3 @method('DELETE')
2
4 <button type="submit" class="btn btn-danger btn-sm"
2 onclick="return confirm('Apakah Anda yakin ingin menghapus data
ini?')">Delete</button>
5 </form>
2 </td>
6 </tr>
2 @endforeach
</table>
7
2
{!! $posts->links() !!}
8
2 @endsection
9
3
0
3
1
3
2
3
3
3
4
3
5
3
6
3
7
3
8
3
9
4
0
4
1
4
2
4
3
4
4
4
5
4
6
4
7
4
8
4
9
5
0
2# posts/create.blade.php
?
1 @extends('template')
2
@section('content')
3
<div class="row mt-5 mb-5">
4 <div class="col-lg-12 margin-tb">
5 <div class="float-left">
6 <h2>Create New Post</h2>
7 </div>
<div class="float-right">
8 <a class="btn btn-secondary"
9 href="{{ route('posts.index') }}"> Back</a>
1 </div>
0 </div>
1 </div>
1
@if ($errors->any())
1 <div class="alert alert-danger">
2 <strong>Whoops!</strong> There were some problems with your
input.<br><br>
1
<ul>
3 @foreach ($errors->all() as $error)
1 <li>{{ $error }}</li>
4 @endforeach
1 </ul>
</div>
5 @endif
1
6 <form action="{{ route('posts.store') }}" method="POST">
1 @csrf
7
1 <div class="row">
8 <div class="col-xs-12 col-sm-12 col-md-12">
<div class="form-group">
1 <strong>Title:</strong>
9 <input type="text" name="title" class="form-control"
2 placeholder="Title">
0 </div>
</div>
2 <div class="col-xs-12 col-sm-12 col-md-12">
1 <div class="form-group">
2 <strong>Content:</strong>
2 <textarea class="form-control" style="height:150px"
2 name="content" placeholder="Content"></textarea>
</div>
3 </div>
2 <div class="col-xs-12 col-sm-12 col-md-12 text-center">
4 <button type="submit" class="btn btn-primary">Submit</button>
2 </div>
5 </div>
2
</form>
6 @endsection
2
7
2
8
2
9
3
0
3
1
3
2
3
3
3
4
3
5
3
6
3
7
3
8
3
9
4
0
4
1
4
2
4
3
4
4
4
5
4
6
4
7
4
8
3# posts/show.blade.php
?
1 @extends('template')
2
@section('content')
3
<div class="row mt-5 mb-5">
4 <div class="col-lg-12 margin-tb">
5 <div class="float-left">
6 <h2> Show Post</h2>
7 </div>
<div class="float-right">
8 <a class="btn btn-secondary"
9 href="{{ route('posts.index') }}"> Back</a>
1 </div>
0 </div>
1 </div>
1
<div class="row">
1 <div class="col-xs-12 col-sm-12 col-md-12">
2 <div class="form-group">
1 <strong>Title:</strong>
3 {{ $post->title }}
</div>
1 </div>
4 <div class="col-xs-12 col-sm-12 col-md-12">
1 <div class="form-group">
5 <strong>Content:</strong>
1 {{ $post->content }}
</div>
6 </div>
1
7
1
8
1
9
2
0
2
1
2
2
2 </div>
3 @endsection
2
4
2
5
2
6
2
7
2
8
2
9
4# posts/edit.blade.php
?
1 @extends('template')
2
@section('content')
3
<div class="row mt-5 mb-5">
4 <div class="col-lg-12 margin-tb">
5 <div class="float-left">
6 <h2>Edit Post</h2>
7 </div>
<div class="float-right">
8 <a class="btn btn-secondary" href="{{ route('posts.index')
9 }}"> Back</a>
1 </div>
0 </div>
1 </div>
1
@if ($errors->any())
1 <div class="alert alert-danger">
2 <strong>Whoops!</strong> There were some problems with your
1 input.<br><br>
3 <ul>
@foreach ($errors->all() as $error)
1 <li>{{ $error }}</li>
4 @endforeach
1 </ul>
5 </div>
@endif
1
6
<form action="{{ route('posts.update',$post->id) }}" method="POST">
1 @csrf
7 @method('PUT')
1
8 <div class="row">
1 <div class="col-xs-12 col-sm-12 col-md-12">
<div class="form-group">
9 <strong>Title:</strong>
2 <input type="text" name="title" value="{{ $post->title
0 }}" class="form-control" placeholder="Title">
2 </div>
1 </div>
<div class="col-xs-12 col-sm-12 col-md-12">
2 <div class="form-group">
2 <strong>Content:</strong>
2 <textarea class="form-control" style="height:150px"
3 name="content" placeholder="Content">{{ $post->content }}</textarea>
</div>
2 </div>
4 <div class="col-xs-12 col-sm-12 col-md-12 text-center">
2 <button type="submit" class="btn btn-
5 primary">Update</button>
2 </div>
</div>
6
2 </form>
7 @endsection
2
8
2
9
3
0
3
1
3
2
3
3
3
4
3
5
3
6
3
7
3
8
3
9
4
0
4
1
4
2
4
3
4
4
4
5
4
6
4
7
4
8
4
9
Loading...
http://127.0.0.1:8000/posts
Klik tombol Create Post, maka akan muncul halaman seperti di bawah ini:
Silahkan isi dengan judul dan content. Jika sudah, klik tombol Submit.
… dan untuk tampilan Detail, bisa klik tombol Show pada halaman index.
Hasilnya:
Penutup
Alhamdulillah, telah selesai tutorial CRUD sederhana menggunakan Laravel 8 pada saat ini.
Loading...
Kita telah banyak belajar tentang pengembangan Laravel 8, hal baru pada route, membuat
model dan migration, membuat controller dan membuat view dan lain-lain.