Cara Melakukan Join, Search, dan Filtering Data di Laravel - Perwira Learning Center

 

Cara Melakukan Join, Search, dan Filtering Data di Laravel 

 

1. Latar Belakang

    Dalam pengembangan aplikasi berbasis database, kebutuhan untuk menampilkan data yang saling berelasi hampir tidak bisa dihindari. Sebuah sistem akademik misalnya, pasti membutuhkan relasi antara tabel students dan classes, atau students dan majors. Untuk itu dibutuhkan teknik penggabungan data yang dikenal sebagai join.

    Selain penggabungan data, pengguna juga membutuhkan fitur pencarian dan penyaringan data. Tanpa fitur search dan filtering, pengguna harus melihat seluruh isi tabel secara manual, yang jelas tidak efisien ketika data sudah berjumlah ratusan bahkan ribuan.

    Laravel menyediakan Query Builder dan Eloquent ORM yang mempermudah proses join, pencarian, dan filtering data secara terstruktur, aman, dan mudah dibaca. Dengan memanfaatkan fitur ini, pengembang dapat membangun aplikasi yang lebih dinamis dan responsif terhadap kebutuhan pengguna.

 


2. Alat dan Bahan

 a. Perangkat Lunak

    - Web browser (contoh: Google Chrome atau Mozilla Firefox) 

    - Code editor / text editor (contoh: Visual Studio Code)

    - Terminal / Command Prompt

    - Web server    

    - Composer 

    - PHP minimal versi 8.x 

b. Perangkat Keras

     - Laptop / Komputer.   

3. Pembahasan 

3.1 Apa itu Join? 

1. Pengertian Join

    Join adalah teknik dalam database yang digunakan untuk menggabungkan data dari dua atau lebih tabel berdasarkan kolom yang saling berelasi. Relasi tersebut biasanya terjadi antara primary key pada satu tabel dengan foreign key pada tabel lainnya. Dengan menggunakan join, data yang sebelumnya berada di tabel yang berbeda dapat ditampilkan dalam satu hasil query sehingga lebih efisien dan mudah dibaca.

    Dalam framework Laravel, terdapat dua cara utama untuk melakukan join, yaitu menggunakan Query Builder dan menggunakan relasi pada Eloquent ORM.

    Query Builder adalah fitur Laravel yang digunakan untuk membangun query database secara langsung menggunakan sintaks PHP yang lebih sederhana dibandingkan SQL murni. Dengan Query Builder, developer dapat menuliskan perintah join secara eksplisit menggunakan method seperti join(), leftJoin(), atau rightJoin().

    Sedangkan Eloquent ORM menggunakan konsep relasi antar model, seperti hasOne, hasMany, belongsTo, dan belongsToMany. Dengan cara ini, penggabungan data tidak dituliskan secara manual seperti pada Query Builder, tetapi dilakukan melalui relasi antar model sehingga kode menjadi lebih rapi dan mudah dipahami.

Apa itu primary key dan foreign key? 

    Primary key adalah kolom pada sebuah tabel yang berfungsi sebagai penanda unik untuk setiap baris data. Artinya, setiap data dalam tabel harus memiliki nilai yang berbeda pada kolom ini dan tidak boleh kosong (null). Tujuan utama primary key adalah supaya setiap data bisa diidentifikasi dengan jelas. Tanpa ini, database akan kesulitan membedakan satu data dengan data lainnya. 

    Foreign key adalah kolom pada sebuah tabel yang digunakan untuk menghubungkan tabel tersebut dengan tabel lain. Biasanya foreign key mengambil nilai dari primary key tabel lain. Tujuannya adalah untuk membangun relasi antar tabel. 

Contoh sederhana join:

 

 

Tabel students memiliki kolom school_class_id yang terhubung ke tabel school_classes melalui kolom id. Dengan join, kita bisa menampilkan nama siswa sekaligus nama kelasnya dalam satu query. Nah nanti hasilnya gini: 

 

Tanpa join, data akan terpisah dan harus diambil satu per satu. Itu tidak efisien dan tidak praktis dalam aplikasi nyata. 

2. Jenis-Jenis Join

Beberapa jenis join yang umum digunakan dalam database antara lain:

1. Inner Join

Inner join digunakan untuk mengambil data yang memiliki pasangan pada kedua tabel.

2. Left Join

Left join akan menampilkan semua data dari tabel kiri dan data yang cocok dari tabel kanan.

3. Right Join

Right join akan menampilkan semua data dari tabel kanan dan data yang cocok dari tabel kiri.

4. Cross Join

Cross join menghasilkan kombinasi semua baris dari kedua tabel.

Dalam pengembangan aplikasi Laravel, jenis join yang paling sering digunakan adalah inner join dan left join.

3. Konsep Relasi Table 

Relasi tabel adalah hubungan antara satu tabel dengan tabel lainnya dalam database. Relasi ini memungkinkan data dapat saling terhubung dan diakses dengan lebih mudah.

Jenis relasi yang umum digunakan antara lain:

1. One to One

Satu data pada tabel pertama hanya berhubungan dengan satu data pada tabel kedua.

2. One to Many

Satu data pada tabel pertama dapat berhubungan dengan banyak data pada tabel kedua.

3. Many to Many

Banyak data pada tabel pertama dapat berhubungan dengan banyak data pada tabel kedua. Relasi ini biasanya direpresentasikan dengan penggunaan foreign key. 

3. Perbedaan Join Menggunakan Query Builder dan Relasi Eloquent 

Query Builder adalah fitur Laravel yang digunakan untuk menulis query database secara manual tetapi tetap menggunakan sintaks Laravel.

Contoh join menggunakan Query Builder:

$students = DB::table('students')
    ->join('school_classes', 'students.school_class_id', '=', 'school_classes.id')
    ->select('students.name', 'school_classes.name as class_name')
    ->get();
Sedangkan Eloquent menggunakan konsep relasi model sehingga kode menjadi lebih sederhana.

Contoh relasi pada model:

public function class()
{
    return $this->belongsTo(SchoolClass::class);
}

Kemudian pemanggilan datanya:

$students = Student::with('class')->get();

Eloquent biasanya lebih mudah dibaca, sedangkan Query Builder memberikan kontrol query yang lebih detail.

3.2 Apa itu Search dan Filtering Data?

1. Pengertian Search

    Search atau pencarian adalah proses mencari data tertentu berdasarkan kata kunci yang dimasukkan oleh pengguna. Fitur ini biasanya digunakan untuk menemukan data dengan cepat tanpa harus melihat seluruh isi tabel.

Contohnya mencari siswa berdasarkan nama.

2. Pengertian Filtering

    Filtering adalah proses menyaring data berdasarkan kriteria tertentu. Berbeda dengan search yang menggunakan kata kunci, filtering biasanya menggunakan kategori atau kondisi tertentu.

Contohnya menampilkan hanya siswa dari kelas tertentu.

3. Perbedaan Search dan Filtering

- Search digunakan untuk menemukan data berdasarkan kata kunci tertentu.

- Filtering digunakan untuk menyaring data berdasarkan kondisi atau kategori tertentu.

Search biasanya menggunakan operator seperti LIKE, sedangkan filtering menggunakan operator perbandingan seperti =, >, atau <.

4. Operator yang Digunakan

Beberapa operator yang sering digunakan dalam proses search dan filtering antara lain:

1. LIKE

digunakan untuk mencari data berdasarkan kata kunci

2. =

digunakan untuk mencocokkan nilai yang sama

3. < >

digunakan untuk perbandingan nilai

4. where

digunakan untuk memberikan kondisi pada query

Contoh search menggunakan LIKE:

$students = DB::table('students')
    ->where('name', 'like', '%'.$request->search.'%')
    ->get();

Contoh filtering berdasarkan kelas:

$students = DB::table('students')
    ->where('school_class_id', $request->class_id)
    ->get();

3.3 Implementasi Join, Search, dan  pada Laravel Blade

Berikut ini langkah-langkah implementasi sederhana:

1. Membuat Project Laravel

Pertama buat project Laravel menggunakan Composer melalui terminal.

composer create-project laravel/laravel siswa-app

Masuk ke folder project.

cd siswa-app

Jalankan server Laravel.

php artisan serve 

2. Membuat Migration

Buat tabel students dan school_classes.

php artisan make:model SchoolClass -m
php artisan make:model Student -m

Huruf -m adalah singkatan dari migration. Artinya Laravel akan membuat dua hal sekaligus: 

1. Model

2. File migration untuk tabel database

Tanpa -m, Laravel hanya membuat model saja.

- Migration untuk tabel school_classes
Schema::create('school_classes', function (Blueprint $table) {
    $table->id();
    $table->string('class_name');
    $table->timestamps();
});
- Migration untuk tabel students

Schema::create('students', function (Blueprint $table) {
    $table->id();
    $table->string('name');
    $table->string('email');
    $table->integer('age');
    $table->foreignId('school_class_id')->constrained();
    $table->timestamps();
});

Kemudian jalankan migration.

php artisan migrate

3. Membuat Relasi Model

Pada model Student.php

public function schoolClass()
{
    return $this->belongsTo(SchoolClass::class);
}

Pada model SchoolClass.php

public function students()
{
    return $this->hasMany(Student::class);
}

Relasi ini digunakan agar Laravel dapat menghubungkan tabel students dengan school_classes

4. Membuat Controller 

Buat controller untuk mengatur logika join, search, dan filtering.

php artisan make:controller StudentController

Isi controller seperti berikut:

<?php

namespace App\Http\Controllers;
use App\Models\Student;
use App\Models\SchoolClass;
use Illuminate\Http\Request;

class StudentController extends Controller
{
    public function index(Request $request)
    {
        // JOIN
        $query = Student::with('schoolClass');

        // SEARCH
        if ($request->search) {
            $query->where(function ($q) use ($request) {
                $q->where('name','like','%'.$request->search.'%')
                  ->orWhere('email','like','%'.$request->search.'%')
                  ->orWhere('age','like','%'.$request->search.'%')
                  ->orWhere('school_class_id','like','%'.$request->search.'%');
            });
        }

        // FILTER
        if ($request->class) {
            $query->where('school_class_id', $request->class);
        }

        $students = $query->get();
        $classes = SchoolClass::all();

        return view('students.index', compact('students','classes'));
    }
}

Penjelasan singkat:

- with('schoolClass') digunakan untuk mengambil relasi kelas (join menggunakan Eloquent)

- search digunakan untuk mencari data berdasarkan nama, email, umur, atau kelas

- filter digunakan untuk menampilkan data berdasarkan kelas tertentu 

5. Menambahkan Route

Tambahkan route pada file web.php.

<?php

use Illuminate\Support\Facades\Route;
use App\Http\Controllers\StudentController;

Route::get('/', [StudentController::class, 'index'])
    ->name('tes');

 6. Membuat View Blade

Buat folder students di dalam folder views, lalu buat file index.blade.php.

resources/views/students/index.blade.php

Isi kodenya:

<!DOCTYPE html>
<html>
<head>
    <title>Data Students</title>
</head>
<body>

<h2>Data Students</h2>

<form method="GET" action="{{ route('tes') }}">
    
    <input type="text" name="search"
           placeholder="Cari nama atau email..."
           value="{{ request('search') }}">

    <select name="class">
        <option value="">-- Semua Kelas --</option>
        @foreach ($classes as $class)
            <option value="{{ $class->id }}"
                {{ request('class') == $class->id ? 'selected' : '' }}>
                {{ $class->class_name }}
            </option>
        @endforeach
    </select>

    <button type="submit">Cari</button>
</form>

<br>

<table border="1" cellpadding="10">
<tr>
<th>No</th>
<th>Nama</th>
<th>Email</th>
<th>Umur</th>
<th>Kelas</th>
</tr>

@forelse ($students as $index => $student)
<tr>
<td>{{ $index + 1 }}</td>
<td>{{ $student->name }}</td>
<td>{{ $student->email }}</td>
<td>{{ $student->age }}</td>
<td>{{ $student->schoolClass->class_name ?? '-' }}</td>
</tr>
@empty
<tr>
<td colspan="5">Data tidak ditemukan</td>
</tr>
@endforelse

</table>

</body>
</html>

 7. Menjalankan AplikasI

Jalankan server Laravel.

php artisan serve

Kemudian buka browser:

http://127.0.0.1:8000/

Hasilnya akan seperti ini:

 


 

3.4 Kesimpulan 

    Join, search, dan filtering merupakan teknik penting dalam pengelolaan data pada aplikasi berbasis database. Join digunakan untuk menggabungkan data dari beberapa tabel yang memiliki hubungan, sedangkan search dan filtering digunakan untuk mempermudah pengguna dalam menemukan dan menyaring data yang dibutuhkan.

    Laravel menyediakan berbagai fitur seperti Query Builder dan Eloquent ORM yang mempermudah implementasi teknik tersebut. Dengan menggunakan fitur ini, pengembang dapat membuat aplikasi yang lebih efisien, terstruktur, dan mudah digunakan oleh pengguna.

    Penerapan join, search, dan filtering yang baik akan membantu meningkatkan performa aplikasi serta memberikan pengalaman penggunaan yang lebih baik terutama ketika jumlah data dalam sistem semakin besar. 

4, Daftar Pustaka 

Petani Kode. (n.d.). Tutorial Laravel untuk pemula. Diakses dari https://www.petanikode.com (Petani Kode)

Jagoan Hosting. (2025). Cara membuat fitur pencarian dengan Laravel. Diakses dari https://www.jagoanhosting.com/tutorial/laravel/cara-membuat-fitur-pencarian-dengan-laravel 

Indeveloper. (2021). Tutorial Laravel cara membuat pencarian (search data). Diakses dari https://www.indeveloper.id/2021/03/tutorial-laravel-cara-membuat-pencarian.html (Tutorial Pemrograman Bahasa Indonesia)

SantriKoding. (2026). Tutorial Laravel DataTables dan filtering data. Diakses dari https://santrikoding.com/tutorial-laravel-datatables-yajra-1 (santrikoding.com)

Posting Komentar

0 Komentar