Laravel, framework PHP yang elegan dan powerful, semakin populer di kalangan developer web. Dengan sintaks yang bersih dan fitur yang lengkap, Laravel memudahkan kita dalam membangun aplikasi web yang kompleks. Nah, kalau kamu baru mulai belajar Laravel dan bingung mau mulai dari mana, artikel ini cocok banget buat kamu! Kita akan membahas Contoh Project Laravel Sederhana dengan Database MySQL, lengkap dengan studi kasus dan implementasi langkah demi langkah. Yuk, simak!
1. Mengapa Memilih Laravel dan MySQL untuk Proyek Web Sederhana?
Sebelum kita menyelam lebih dalam ke contoh project, mari kita bahas dulu kenapa kombinasi Laravel dan MySQL ini begitu menarik.
- Laravel: Framework yang Efisien dan Produktif: Laravel menyediakan banyak fitur bawaan, seperti routing, ORM (Object-Relational Mapping) dengan Eloquent, templating engine (Blade), dan sistem otentikasi yang memudahkan pengembangan. Ini berarti kamu bisa fokus pada logika aplikasi daripada menghabiskan waktu untuk menulis kode boilerplate.
- MySQL: Database Relasional yang Andal dan Populer: MySQL adalah sistem manajemen database relasional (RDBMS) open-source yang sangat populer. MySQL dikenal karena keandalannya, skalabilitasnya, dan kemudahan penggunaannya. Ini adalah pilihan yang tepat untuk menyimpan dan mengelola data aplikasi web kita.
- Komunitas yang Besar dan Dukungan yang Melimpah: Laravel dan MySQL memiliki komunitas yang besar dan aktif. Ini berarti kamu bisa dengan mudah menemukan solusi untuk masalah yang kamu hadapi, serta belajar dari developer lain. Dokumentasi yang lengkap juga tersedia untuk kedua teknologi ini.
- Skalabilitas: Meskipun kita membuat project sederhana, Laravel dan MySQL sudah mendukung skalabilitas untuk pertumbuhan aplikasi di masa depan.
Singkatnya, Laravel dan MySQL adalah kombinasi yang ideal untuk membangun aplikasi web yang sederhana, efisien, dan mudah dipelihara.
2. Studi Kasus: Aplikasi To-Do List Sederhana dengan Laravel dan MySQL
Untuk contoh project kita, kita akan membangun aplikasi To-Do List sederhana. Aplikasi ini memungkinkan pengguna untuk:
- Menambahkan tugas (To-Do)
- Menandai tugas sebagai selesai
- Menghapus tugas
Ini adalah studi kasus yang cukup sederhana, namun cukup kompleks untuk menunjukkan dasar-dasar penggunaan Laravel dan MySQL. Aplikasi To-Do List ini akan menggunakan database MySQL untuk menyimpan data tugas.
3. Persiapan Lingkungan Pengembangan Laravel
Sebelum kita mulai membuat project, pastikan kamu sudah mempersiapkan lingkungan pengembanganmu. Kamu membutuhkan:
- PHP: Pastikan PHP sudah terinstall di sistemmu (minimal versi 7.3).
- Composer: Composer adalah dependency manager untuk PHP. Unduh dan install Composer dari https://getcomposer.org/.
- MySQL: Install MySQL server dan MySQL client di sistemmu.
- Text Editor/IDE: Pilih text editor atau IDE yang nyaman untukmu. Beberapa pilihan populer adalah VS Code, Sublime Text, dan PHPStorm.
- XAMPP/Laragon (Optional): Jika kamu ingin menggunakan web server dan database server secara lokal, kamu bisa menggunakan XAMPP atau Laragon.
Setelah semua komponen di atas terinstall, kamu siap untuk membuat project Laravel baru.
4. Membuat Project Laravel Baru dan Konfigurasi Database MySQL
Buka terminal atau command prompt, lalu navigasikan ke direktori tempat kamu ingin menyimpan projectmu. Kemudian, jalankan perintah berikut untuk membuat project Laravel baru:
composer create-project --prefer-dist laravel/laravel todolist
Perintah ini akan membuat project Laravel baru dengan nama todolist
. Setelah proses instalasi selesai, masuk ke direktori project:
cd todolist
Selanjutnya, kita perlu mengkonfigurasi database MySQL. Buka file .env
di root direktori project. Cari bagian berikut:
DB_CONNECTION=mysql
DB_HOST=127.0.0.1
DB_PORT=3306
DB_DATABASE=laravel
DB_USERNAME=root
DB_PASSWORD=
Ubah nilai-nilai tersebut sesuai dengan konfigurasi database MySQL kamu. Pastikan kamu sudah membuat database dengan nama yang sesuai dengan DB_DATABASE
. Misalnya, jika kamu membuat database dengan nama todolist_db
, maka ubah DB_DATABASE=laravel
menjadi DB_DATABASE=todolist_db
. Sesuaikan juga DB_USERNAME
dan DB_PASSWORD
dengan kredensial database kamu.
5. Membuat Model, Migration, dan Controller untuk To-Do
Sekarang, mari kita buat model, migration, dan controller untuk To-Do list kita. Jalankan perintah berikut di terminal:
php artisan make:model Todo -mcr
Perintah ini akan membuat:
- Model:
app/Models/Todo.php
- Migration:
database/migrations/[timestamp]_create_todos_table.php
- Controller:
app/Http/Controllers/TodoController.php
Buka file migration database/migrations/[timestamp]_create_todos_table.php
dan ubah method up()
menjadi seperti berikut:
<?php
use IlluminateDatabaseMigrationsMigration;
use IlluminateDatabaseSchemaBlueprint;
use IlluminateSupportFacadesSchema;
class CreateTodosTable extends Migration
{
/**
* Run the migrations.
*
* @return void
*/
public function up()
{
Schema::create('todos', function (Blueprint $table) {
$table->id();
$table->string('title');
$table->text('description')->nullable();
$table->boolean('completed')->default(false);
$table->timestamps();
});
}
/**
* Reverse the migrations.
*
* @return void
*/
public function down()
{
Schema::dropIfExists('todos');
}
}
Kode di atas mendefinisikan tabel todos
dengan kolom-kolom:
id
: Primary key (auto-increment)title
: Judul tugas (string)description
: Deskripsi tugas (text, opsional)completed
: Status tugas (boolean, default false)created_at
: Timestamp createdupdated_at
: Timestamp updated
Selanjutnya, jalankan migration untuk membuat tabel di database:
php artisan migrate
Sekarang, buka file model app/Models/Todo.php
dan tambahkan property $fillable
untuk menentukan kolom mana yang boleh diisi:
<?php
namespace AppModels;
use IlluminateDatabaseEloquentFactoriesHasFactory;
use IlluminateDatabaseEloquentModel;
class Todo extends Model
{
use HasFactory;
protected $fillable = [
'title',
'description',
'completed',
];
}
Terakhir, kita akan mengisi controller app/Http/Controllers/TodoController.php
dengan logic untuk menangani request HTTP.
6. Mengimplementasikan Fungsi CRUD (Create, Read, Update, Delete) pada Controller
Mari kita implementasikan fungsi CRUD pada TodoController
. Berikut adalah contoh implementasi lengkapnya:
<?php
namespace AppHttpControllers;
use AppModelsTodo;
use IlluminateHttpRequest;
class TodoController extends Controller
{
/**
* Display a listing of the resource.
*
* @return IlluminateHttpResponse
*/
public function index()
{
$todos = Todo::all();
return view('todos.index', compact('todos'));
}
/**
* Show the form for creating a new resource.
*
* @return IlluminateHttpResponse
*/
public function create()
{
return view('todos.create');
}
/**
* Store a newly created resource in storage.
*
* @param IlluminateHttpRequest $request
* @return IlluminateHttpResponse
*/
public function store(Request $request)
{
$request->validate([
'title' => 'required|max:255',
'description' => 'nullable',
]);
Todo::create($request->all());
return redirect()->route('todos.index')
->with('success', 'To-Do berhasil ditambahkan!');
}
/**
* Display the specified resource.
*
* @param AppModelsTodo $todo
* @return IlluminateHttpResponse
*/
public function show(Todo $todo)
{
return view('todos.show', compact('todo'));
}
/**
* Show the form for editing the specified resource.
*
* @param AppModelsTodo $todo
* @return IlluminateHttpResponse
*/
public function edit(Todo $todo)
{
return view('todos.edit', compact('todo'));
}
/**
* Update the specified resource in storage.
*
* @param IlluminateHttpRequest $request
* @param AppModelsTodo $todo
* @return IlluminateHttpResponse
*/
public function update(Request $request, Todo $todo)
{
$request->validate([
'title' => 'required|max:255',
'description' => 'nullable',
]);
$todo->update($request->all());
return redirect()->route('todos.index')
->with('success', 'To-Do berhasil diupdate!');
}
/**
* Update the specified resource in storage. Specifically for marking complete.
*
* @param IlluminateHttpRequest $request
* @param AppModelsTodo $todo
* @return IlluminateHttpResponse
*/
public function complete(Todo $todo)
{
$todo->completed = true;
$todo->save();
return redirect()->route('todos.index')
->with('success', 'To-Do berhasil ditandai selesai!');
}
/**
* Remove the specified resource from storage.
*
* @param AppModelsTodo $todo
* @return IlluminateHttpResponse
*/
public function destroy(Todo $todo)
{
$todo->delete();
return redirect()->route('todos.index')
->with('success', 'To-Do berhasil dihapus!');
}
}
Kode di atas menyediakan fungsi:
index()
: Menampilkan daftar semua To-Do.create()
: Menampilkan form untuk membuat To-Do baru.store()
: Menyimpan To-Do baru ke database.show()
: Menampilkan detail sebuah To-Do.edit()
: Menampilkan form untuk mengedit sebuah To-Do.update()
: Mengupdate data To-Do di database.destroy()
: Menghapus To-Do dari database.complete()
: Menandai To-Do sebagai selesai.
Perhatikan bahwa kita menggunakan validation untuk memastikan data yang masuk valid. Kita juga menggunakan redirect()
untuk mengarahkan pengguna kembali ke halaman daftar To-Do setelah melakukan operasi CRUD.
7. Membuat View dengan Blade Templating Engine
Selanjutnya, kita perlu membuat view untuk menampilkan data To-Do dan form untuk membuat/mengedit To-Do. Buat direktori resources/views/todos
dan buat file-file berikut:
index.blade.php
: Menampilkan daftar To-Do.create.blade.php
: Form untuk membuat To-Do baru.edit.blade.php
: Form untuk mengedit To-Do.show.blade.php
: Menampilkan detail To-Do.
Berikut adalah contoh implementasi index.blade.php
:
<!DOCTYPE html>
<html>
<head>
<title>To-Do List</title>
<link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/bootstrap/4.5.2/css/bootstrap.min.css">
</head>
<body>
<div class="container">
<h1>To-Do List</h1>
<a href="{{ route('todos.create') }}" class="btn btn-primary mb-3">Tambah To-Do</a>
@if ($message = Session::get('success'))
<div class="alert alert-success">
<p>{{ $message }}</p>
</div>
@endif
<table class="table table-bordered">
<thead>
<tr>
<th>Judul</th>
<th>Deskripsi</th>
<th>Status</th>
<th>Aksi</th>
</tr>
</thead>
<tbody>
@foreach ($todos as $todo)
<tr>
<td>{{ $todo->title }}</td>
<td>{{ $todo->description }}</td>
<td>{{ $todo->completed ? 'Selesai' : 'Belum Selesai' }}</td>
<td>
<a href="{{ route('todos.show', $todo->id) }}" class="btn btn-info btn-sm">Lihat</a>
<a href="{{ route('todos.edit', $todo->id) }}" class="btn btn-primary btn-sm">Edit</a>
<form action="{{ route('todos.destroy', $todo->id) }}" method="POST" style="display: inline-block;">
@csrf
@method('DELETE')
<button type="submit" class="btn btn-danger btn-sm" onclick="return confirm('Apakah Anda yakin ingin menghapus To-Do ini?')">Hapus</button>
</form>
@if(!$todo->completed)
<form action="{{ route('todos.complete', $todo->id) }}" method="POST" style="display: inline-block;">
@csrf
<button type="submit" class="btn btn-success btn-sm">Selesaikan</button>
</form>
@endif
</td>
</tr>
@endforeach
</tbody>
</table>
</div>
</body>
</html>
Contoh implementasi create.blade.php
:
<!DOCTYPE html>
<html>
<head>
<title>Tambah To-Do</title>
<link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/bootstrap/4.5.2/css/bootstrap.min.css">
</head>
<body>
<div class="container">
<h1>Tambah To-Do</h1>
<form action="{{ route('todos.store') }}" method="POST">
@csrf
<div class="form-group">
<label for="title">Judul:</label>
<input type="text" class="form-control" id="title" name="title" required>
</div>
<div class="form-group">
<label for="description">Deskripsi:</label>
<textarea class="form-control" id="description" name="description"></textarea>
</div>
<button type="submit" class="btn btn-primary">Simpan</button>
<a href="{{ route('todos.index') }}" class="btn btn-secondary">Batal</a>
</form>
</div>
</body>
</html>
Kamu bisa membuat implementasi serupa untuk edit.blade.php
dan show.blade.php
. Jangan lupa untuk menggunakan Blade syntax untuk menampilkan data dan membuat form.
8. Mendefinisikan Route untuk Aplikasi To-Do List
Terakhir, kita perlu mendefinisikan route untuk aplikasi To-Do List. Buka file routes/web.php
dan tambahkan kode berikut:
<?php
use IlluminateSupportFacadesRoute;
use AppHttpControllersTodoController;
/*
|--------------------------------------------------------------------------
| Web Routes
|--------------------------------------------------------------------------
|
| Here is where you can register web routes for your application. These
| routes are loaded by the RouteServiceProvider within a group which
| contains the "web" middleware group. Now create something great!
|
*/
Route::get('/', function () {
return redirect()->route('todos.index');
});
Route::resource('todos', TodoController::class);
Route::post('todos/{todo}/complete', [TodoController::class, 'complete'])->name('todos.complete');
Kode di atas mendefinisikan route untuk semua fungsi CRUD pada TodoController
menggunakan Route::resource()
. Kita juga menambahkan route untuk halaman index dan fungsi complete()
.
9. Menguji Aplikasi To-Do List Sederhana
Setelah semua langkah di atas selesai, kamu bisa menguji aplikasi To-Do List kamu. Jalankan server development Laravel:
php artisan serve
Buka browser dan akses http://localhost:8000/todos
. Kamu seharusnya melihat daftar To-Do (yang masih kosong). Kamu bisa menambahkan To-Do baru, mengedit To-Do, menghapus To-Do, dan menandai To-Do sebagai selesai.
10. Kesimpulan dan Langkah Selanjutnya dalam Pengembangan Laravel
Selamat! Kamu telah berhasil membuat Contoh Project Laravel Sederhana dengan Database MySQL: aplikasi To-Do List. Proyek ini adalah fondasi yang baik untuk memahami dasar-dasar Laravel dan interaksi dengan database MySQL.
Langkah selanjutnya, kamu bisa meningkatkan aplikasi ini dengan:
- Menambahkan fitur otentikasi: Memungkinkan pengguna untuk membuat akun dan mengelola To-Do list mereka sendiri.
- Menggunakan AJAX: Mengupdate data To-Do tanpa me-refresh halaman.
- Menambahkan fitur pencarian: Memungkinkan pengguna untuk mencari To-Do berdasarkan judul atau deskripsi.
- Menggunakan library CSS framework: Seperti Bootstrap atau Tailwind CSS untuk mempercantik tampilan aplikasi.
- Menambahkan unit testing: Memastikan kode kamu berjalan dengan benar.
Dengan terus berlatih dan mengembangkan proyek-proyek kecil seperti ini, kamu akan semakin mahir dalam menggunakan Laravel dan MySQL. Jangan takut untuk mencoba hal-hal baru dan bereksperimen dengan fitur-fitur Laravel yang lain. Selamat belajar dan semoga sukses!