Tutorial Laravel 11 : #16 Relasi Database dengan Eloquent

Dalam memanfaatkan database, dikenal ada relasi antar entity atau antar tabel. Penggunaan fitur ini pada database konvesional membutuhkan penggunaan perintah SQL yang relatif panjang dan juga membutuhkan penanganan dari program yang membutuhkan program yang rumit pula. Pada Laravel, relasi database dengan Eloquent akan memudahkan penggunaan database tersebut.

 

Relasi Database pada Laravel

Berikut adalah beberapa jenis relasi database yang dikenal pada umumnya dan telah diakomodasi oleh Laravel.

  1. Relasi one to one dimana sebuah data pada sebuah tabel hanya memiliki relasi ke sebuah data pada tabel yang lain. Misalnya, sebuah data dalam tabel tbl_siswa memiliki relasi ke satu data di tabel tbl_kontak.
  2. Relasi one to many dimana sebuah data pada sebuah tabel memiliki relasi ke beberapa data pada tabel yang lain. Misalnya, sebuah data tabel tbl_kategori memiliki relasi banyak data buku di tbl_buku. Atau dengan kata lain 1 kategori memiliki banyak data buku.
  3. Relasi many to one (One to many Inverse) dimana merupakan kebalikan dari relasi one to many. Misalnya kita ingin mengetahui data buku di tbl_buku memiliki kategori apa, maka relasi ini yang akan digunakan.
  4. Relasi many to many dimana banyak data pada sebuah tabel memiliki relasi ke banyak data juga pada tabel yang lainnya, relasi tersebut terbentuk melalui sebuah tabel bantu. Misalnya banyak data pada tabel tbl_siswa memiliki relasi peminjaman ke banyak data pada tabel tbl_buku. Relasi tersebut terbentuk dengan tabel bantu bernama tbl_pinjam.

Untuk memulai tutorial ini kita buat dulu project laravelnya, pada tutorial ini menggunakan project dengan nama ‘latihan_laravel‘, cara membuat project laravel bisa dibaca di sini. Setelah project dibuat, pastikan kita sudah memiliki database, database yang digunakan pada contoh ini bernama ‘datasekolah‘. Jika sudah ada databasenya kita konfigurasi koneksi databasenya dengan project laravel kita pada file .env .

DB_CONNECTION=mysql
DB_HOST=127.0.0.1
DB_PORT=3306
DB_DATABASE=datasekolah
DB_USERNAME=root
DB_PASSWORD=

Nama project dan database silahkan bisa menyesuaikan dengan nama yang diinginkan oleh masing-masing.

 

Relasi One To One dengan Eloquent

Biasanya untuk menghubungkan 2 table atau lebih kita menggunakan fungsi join atau langsung menggabungkannya menggunakan query sql. Tapi di laravel sudah ada ada fitur untuk menghubungkan 2 table atau lebih, dengan menggunakan Eloquent.

Relasi One To One maksudnya 1 record data dari table A memiliki relasi ke 1 record data di table B, misalnya satu orang siswa memiliki 1 nomor hp, begitu juga kebalikannya.

Sebagai contoh kita sekarang kita akan membuat dan menggunakan dua buah table, yaitu table tbl_siswa dan tbl_kontak. Sekarang kita buat kedua table tersebut, kita membuatnya dengan menggunakan Migration dan mengisi datanya dengan Seeding Faker.

 

Konfigurasi Migration Siswa dan Kontak

Sekarang kita buat migration untuk table tbl_siswa :

php artisan make:migration tbl_siswa

Isi file migration siswa dengan sintak :

<?php

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

return new class extends Migration
{
    /**
     * Run the migrations.
     */
    public function up(): void
    {
        Schema::create('tbl_siswa', function (Blueprint $table) { 
            $table->increments('idsiswa'); 
            $table->integer('nis'); 
            $table->string('nama'); 
            $table->string('kelas'); 
            $table->text('alamat'); 
            $table->timestamps(); 
            $table->softDeletes();
        });
    }

    /**
     * Reverse the migrations.
     */
    public function down(): void
    {
        Schema::dropIfExists('tbl_siswa');
    }
};

 

Sekarang kita buat migration untuk table tbl_kontak :

php artisan make:migration tbl_kontak

Isi file migration kontak dengan sintak :

<?php

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

return new class extends Migration
{
    /**
     * Run the migrations.
     */
    public function up(): void
    {
        Schema::create('tbl_kontak', function (Blueprint $table) { 
            $table->increments('idkontak'); 
            $table->integer('hp'); 
            $table->integer('idsiswa'); 
            $table->timestamps(); 
            $table->softDeletes();
        });
    }

    /**
     * Reverse the migrations.
     */
    public function down(): void
    {
        Schema::dropIfExists('tbl_kontak');
    }
};

 

Selanjutnya jalankan migrasinya dengan perintah :

php artisan migrate

Jika berhasil kita akan mempunyai table tbl_siswa dan tbl_kontak.

 

Konfigurasi Seeder Siswa dan Kontak

Selanjutnya kita buat seeder untuk mengisi data tbl_siswa dan tbl_kontak dengan data dummy, dengan perintah :

php artisan make:seeder SiswaSeeder
php artisan make:seeder KontakSeeder

Selanjutnya kita isi SiswaSeeder.php dengan sintak :

<?php

namespace Database\Seeders;

use Illuminate\Database\Console\Seeds\WithoutModelEvents;
use Illuminate\Database\Seeder;
use Illuminate\Support\Facades\DB;

use Faker\Factory as Faker;

class SiswaSeeder extends Seeder
{
    /**
     * Run the database seeds.
     */
    public function run(): void
    {
        $datafaker = Faker::create('id_ID'); 
        for($i = 1; $i <= 50; $i++)
        { 
            // insert data ke table siswa menggunakan Faker 
            DB::table('tbl_siswa')->insert([ 
                'nis' => $datafaker->randomDigit, 
                'nama' => $datafaker->name, 
                'kelas' => $datafaker->company, 
                'alamat' => $datafaker->address, 
                // 'hp' => $datafaker->numberBetween(8000,9000) 
                ]
            ); 
        }
    }
}

dan KontakSeeder.php dengan sintak :

<?php

namespace Database\Seeders;

use Illuminate\Database\Console\Seeds\WithoutModelEvents;
use Illuminate\Database\Seeder;
use Illuminate\Support\Facades\DB;

use Faker\Factory as Faker;

class KontakSeeder extends Seeder
{
    /**
     * Run the database seeds.
     */
    public function run(): void
    {
        $datafaker = Faker::create('id_ID'); 
        for($i = 1; $i <= 50; $i++)
        { 
            // insert data ke table kontak menggunakan Faker 
            DB::table('tbl_kontak')->insert([ 
                'hp' => $datafaker->numberBetween(8000,9000), 
                'idsiswa' => $datafaker->randomDigit,
                ]
            ); 
        }
    }
}

Kemudian jalankan seedernya dengan sintak :

php artisan db:seed --class=SiswaSeeder
php artisan db:seed --class=KontakSeeder

 

Baca Juga  Tutorial Laravel #12 : Eloquent Laravel

Konfigurasi Model Siswa dan Kontak

Kemudian silahkan buat model untuk tbl_siswa dengan menggunakan php artisan :

php artisan make:model SiswaModel

Kemudian buka model SiswaModel.php yang sudah dibuat tersebut dan tambahkan beberapa sintak dan buat method relasi_kontak() untuk relasinya, sehingga sintak lengkapnya menjadi seperti berikut :

latihan_laravel/app/Models/SiswaModel.php :

<?php

namespace App\Models;

use Illuminate\Database\Eloquent\Model;

class SiswaModel extends Model
{
    protected $table = 'tbl_siswa';     //mendeklarasikan bahwa table yang digunakan bernama tbl_siswa
    protected $primaryKey = 'idsiswa';  //mendeklarasikan bahwa Primarykey yang digunakan bernama idsiswa
    protected $dates = ['deleted_at']; //mendeklarasikan table bisa menggunakan softdelete
    
    //mendeklarasikan kolom apa saja yang bisa diisi
    protected $fillable = [
        'idsiswa',
        'nis',
        'nama',
        'kelas',
        'alamat'
    ];

    //membuat relasi dengan tbl_kontak
    public function relasi_kontak() 
    { 
        return $this->hasOne('App\Models\KontakModel','idsiswa'); 
    }
}

Dengan protected $table = “tbl_siswa”; kita memberitahukan bahwa table yang digunakan adalah table “tbl_siswa”, bukan “siswas” (plural), bagian ini sudah dijelaskan pada tutorial sebelumnya tentang pembuatan model dan penamaan otomatisnya pada tutorial Eloquent.

Kemudian terdapat sintak protected $primaryKey = ‘idsiswa’; yang mendeklarasikan bahwa primarykey yang digunakan pada table tbl_siswa adalah idsiswa bukan id.

Pada model SiswaModel.php tersebut terdapat fungsi/method relasi_kontak(), yang memberitahukan model SiswaModel.php bahwa table siswa memiliki relasi 1 ke model KontakModel.php atau table tbl_kontak.

Selanjutnya kita buat model baru untuk table tbl_kontak dengan php artisan dengan nama KontakModel :

php artisan make:model KontakModel

latihan_laravel/app/Models/KontakModel.php :

<?php

namespace App\Models;

use Illuminate\Database\Eloquent\Model;

class KontakModel extends Model
{
    protected $table = 'tbl_kontak';     //mendeklarasikan bahwa table yang digunakan bernama tbl_siswa
    protected $primaryKey = 'idkontak';  //mendeklarasikan bahwa Primarykey yang digunakan bernama idsiswa
    protected $dates = ['deleted_at']; //mendeklarasikan table bisa menggunakan softdelete
    
    //mendeklarasikan kolom apa saja yang bisa diisi
    protected $fillable = [
        'idkontak',
        'hp',
        'idsiswa',
    ];

    //membuat relasi dengan tbl_siswa
    public function relasi_siswa() 
    { 
        return $this->belongsTo('App\Models\SiswaModel'); 
    }
}

Pada model KontakModel.php ini, kita deklarasikan dulu bahwa table yang kita gunakan adalah table ‘tbl_kontak‘, bukan ‘kontaks‘.

protected $table = "tbl_kontak";

Kemudian terdapat sintak protected $primaryKey = ‘idkontak’; yang mendeklarasikan bahwa primarykey yang digunakan pada table tbl_kontak adalah idkontak bukan id.

Kemudian kita buat fungsi untuk menjelaskan pada model KontakModel, bahwa model Kontak terhubung dengan model SiswaModel.

public function relasi_siswa()
{
    return $this->belongsTo('App\Models\SiswaModel')
}

Perhatikan sebelumnya pada model SiswaModel, kita memberitahukan bahwa table siswa memiliki relasi 1 ke table tbl_kontak (hasOne), dan di model KontakModel kita beritahu bahwa table tbl_kontak ini dimiliki oleh table tbl_siswa (belongsTo).

Jadi satu sama lain sudah terhubung sekarang, kedua table ini dihubungkan oleh kolum idsiswa yang ada pada table tbl_kontak, nama kolom idsiswa ini mengikuti nama kolom pada table yang dihubungkan dengannya, jadi secara otomatis table kontak mencari idsiswa-nya masing-masing ke table tbl_siswa.

Fitur ini akan banyak kita butuhkan pada saat membuat aplikasi yang berukuran besar, kita tidak perlu lagi repot-repot menghubungkan table secara manual pada phpmyadmin atau lainnya, cukup mendeklarasikan pada model-nya masing-masing bahwa model tersebut terhubung ke table/model mana saja dan bagaimana jenisnya one to one, one to many atau many to many.

Kemudian buat controller SiswaController.php menggunakan php artisan, masuk ke direktori project laravel kita dan ketik perintah :

php artisan make:controller SiswaController

Cara membuat controller pada laravel menggunakan php artisan sudah dijelaskan pada tutorial sebelumnya. Setelah membuat controller SiswaController.php, kemudian buat method index() di dalamnya.

Untuk melihat hasilnya, kita buat route “/siswa”, kita akan menampilkan data siswa dan data nomor hp masing-masing siswa pada route ini.

laravel_laravel/routes/web.php :

Route::get('/siswa',[SiswaController::class,'index']);

Selanjutnya kita buat controller dengan nama SiswaController.php dengan sintak :

php artisan make:controller SiswaController

Controller tersebut isi dengan sintak :

latihan_laravel/app/Http/controllers/SiswaController.php

<?php

namespace App\Http\Controllers;

use Illuminate\Http\Request;
use App\Models\SiswaModel;

class SiswaController extends Controller
{
    public function index() 
    { 
        // mengambil semua data siswa 
        $datasiswa = SiswaModel::all(); 
        
        // return data ke view 
        return view('siswa/v_siswa', ['var_siswa' => $datasiswa]); 
    }
}

Pada controller ini kita ambil data siswa dan kita return ke view v_siswa.blade.php yang ada dalam folder latihan_laravel\resources\views\siswa, caranya masih sama seperti yang sudah kita pelajari sebelumnya.

Baca Juga  Tutorial Node.js #4 : Cara Menggunakan Modul HTTP

Selanjutnya kita buat sebuah view untuk menampilkan data siswa, buat view sesuai dengan yang sudah kita tentukan pada controller yaitu view v_siswa.blade.php .

latihan_laravel/resources/views/siswa/v_siswa.blade.php :

<!DOCTYPE html>
<html>

    <head>
        <title>Tutorial Laravel : Relasi One To One Eloquent</title>
        <link href="https://stackpath.bootstrapcdn.com/bootstrap/4.2.1/css/bootstrap.min.css" rel="stylesheet">
    </head>

    <body>
        <div class="container">
            <div class="card mt-5">
                <div class="card-body">
                    <h3 class="text-center"><a href="https://www.agussuratna.net">www.agussuratna.net</a></h3>
                    <h5 class="text-center my-4">Relasi One To One Eloquent</h5>
                    <table class="table table-bordered table-striped">
                        <thead>
                            <tr>
                                <th>No</th>
                                <th>ID Siswa</th>
                                <th>NIS</th>
                                <th>Nama</th>
                                <th>Kelas</th>
                                <th>Alamat</th>
                                <th>HP</th>
                            </tr>
                        </thead>
                        <tbody> 
                            {{$i=0}}
                            @foreach($var_siswa as $index=> $s) 
                                <tr>
                                    <td>{{ $index+1 }}</td>
                                    <td>{{ $s->idsiswa }}</td>
                                    <td>{{ $s->nis }}</td>
                                    <td>{{ $s->nama }}</td>
                                    <td>{{ $s->kelas }}</td>
                                    <td>{{ $s->alamat }}</td>
                                    <td>{{ optional($s->relasi_kontak)->hp }}</td>
                                </tr> 
                            @endforeach 
                        </tbody>
                    </table>
                </div>
            </div>
        </div>
    </body>
</html>

Perhatikan pada view di atas, kita menampilkan data siswa menggunakan foreach :

@foreach($var_siswa as $s) 
    <tr>
        <td>{{ $s->idsiswa }}</td>
        <td>{{ $s->nis }}</td>
        <td>{{ $s->nama }}</td>
        <td>{{ $s->kelas }}</td>
        <td>{{ $s->alamat }}</td>
        <td>{{ optional($s->relasi_kontak)->hp }}</td>
    </tr> 
@endforeach

Pada sintak tersebut kita bisa langsung mengakses data kontak dari data siswa.

<td>{{ optional($s->relasi_kontak)->hp }}</td>

Hal ini bisa dilakukan karena kita sudah mendeklarasikan relasi one to one antara kedua table ini (model/table siswa dan model/table kontak). Dari variabel $s kita bisa langsung mengakses ke data kontak {{ optional($s->relasi_kontak) }} dan lebih spesifik lagi dengan memilih nama kolomnya {{ optional($s->relasi_kontak)->hp }}.

Fungsi optional() di Laravel digunakan untuk mencegah error ketika mengakses properti atau metode dari objek yang bisa bernilainull.

Untuk melihat hasilnya kita jalankan projectnya dengan perintah :

php artisan serve

dan akses ke localhost:8000/siswa, maka hasilnya seperti berikut :

Relasi One To Many dengan Eloquent

Relasi one to many adalah relasi antar table yang mana satu buah table bisa memiliki banyak relasi ke record data yang ada di table yang lainnya.

Contohnya table tbl_kelas dan table tbl_jurusan. Satu jurusan bisa dimiliki oleh banyak kelas, dan banyak kelas bisa memiliki satu jurusan, jadinya one to many atau many to one (1 .. n atau n .. 1).

Perhatikan sedikit konsep relasi antar table laravel one to many berikut :

Di sini kita memiliki beberapa data pada table tbl_jurusan dan kita juga telah memiliki beberapa data pada table tbl_kelas, kedua table ini akan dihubungkan secara otomatis oleh kolum idjurusan yang ada pada table tbl_kelas.

Maksudnya, idkelas diambil dari table tbl_kelas dan kolum idkelas pada table tersebut, hal ini sudah secara otomatis dijalankan oleh eloquent.

Seperti pada saat membuat contoh relasi one to one, kita membutuhkan model untuk kedua buah table tersebut, yaitu model JurusanModel dan model KelasModel.

 

Membuat Model, Migration dan Seeder Jurusan

Kita buat model jurusan dengan menggunakan perintah :

php artisan make:model JurusanModel -ms

Sintak diatas akan membuat model dengan nama JurusanModel di dalam folder latihan_laravel\app\Models, juga langsung dengan migration yang bernama 2025_02_01_142546_create_jurusan_models_table.php di dalam folder latihan_laravel\database\migrations dan seedernya yang bernama JurusanModelSeeder.php di dalam folder latihan_laravel\database\seeders.

 

Konfigurasi Migration Jurusan

Sekarang kita buka file migration 2025_02_01_142546_create_jurusan_models_table.php dan ubah sintaknya menjadi seperti berikut :

<?php

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

return new class extends Migration
{
    /**
     * Run the migrations.
     */
    public function up(): void
    {
        Schema::create('tbl_jurusan', function (Blueprint $table) {
            $table->increments('idjurusan');
            $table->string('jurusan');
            $table->timestamps();
            $table->softDeletes();
        });
    }

    /**
     * Reverse the migrations.
     */
    public function down(): void
    {
        Schema::dropIfExists('tbl_jurusan');
    }
};

Jalankan migration nya dengan sintak :

php artisan migrate

 

Konfigurasi Seeder Jurusan

Selanjutnya buka seeder yang bernama JurusanModelSeeder.php dan ubah sintaknya menjadi seperti berikut :

<?php

namespace Database\Seeders;

use Illuminate\Database\Console\Seeds\WithoutModelEvents;
use Illuminate\Database\Seeder;
use Illuminate\Support\Facades\DB;

use Faker\Factory as Faker;

class JurusanModelSeeder extends Seeder
{
    /**
     * Run the database seeds.
     */
    public function run(): void
    {
        $datafaker = Faker::create('id_ID'); 
        for($i = 1; $i <= 50; $i++)
        { 
            // insert data ke table siswa menggunakan Faker 
            DB::table('tbl_jurusan')->insert([ 
                'jurusan' => $datafaker->words(2, true), 
                ]
            ); 
        }
    }
}

 

Konfigurasi Model Jurusan

Karena sebelumnya kita membuat table dengan nama tbl_jurusan, kita harus mendeklarasikan protected $table = “tbl_jurusan”, supaya tidak dianggap table dengan nama jurusans (plural/jamak).

latihan_laravel/app/Models/JurusanModel.php :

<?php

namespace App\Models;

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

class JurusanModel extends Model
{
    use SoftDeletes;

    protected $table = "tbl_jurusan"; 
    protected $primaryKey = "idjurusan";
    protected $dates = ['deleted_at'];
    protected $fillable = ['idjurusan', 'jurusan']; 
    
    //relasi ke model tbl_kelas
    public function relasi_kelas() 
    { 
        return $this->hasMany('App\Models\KelasModel','idjurusan'); 
    }
}

Perhatikan pada model JurusanModel.php di atas, kita membuat fungsi untuk memberitahukan ke sistem bahwa kita akan membuat relasi Many ke model KelasModel atau table tbl_kelas.

public function relasi_kelas()
{
    return $this->hasMany('App\Models\KelasModel','idjurusan');
}

Kita mendeklarasikan table/model JurusanModel ini dengan model/table KelasModel, menggunakan fungsi return $this->hasMany(‘App\Models\KelasModel’,’idjurusan’);, yang berarti kita memberitahukan bahwa jurusan bisa mempunyai banyak kelas, dengan nama field yang ada pada table tbl_kelas dengan nama ‘idjurusan’ yang di relasikan dengan table tbl_jurusan.

Baca Juga  Hypertext Markup Language (HTML)

 

 

Membuat Model, Migration dan Seeder Kelas

Selanjutnya kita akan membuat kebalikannya, buat model KelasModel.php.

php artisan make:model KelasModel -ms

Sintak diatas akan membuat model dengan nama KelasModel di dalam folder latihan_laravel\app\Models, juga langsung dengan migration yang bernama 2025_02_01_142525_create_kelas_models_table.php di dalam folder latihan_laravel\database\migrations dan seedernya yang bernama KelasModelSeeder.php di dalam folder latihan_laravel\database\seeders.

 

Konfigurasi Migration Kelas

Sekarang kita buka file migration 2025_02_01_142525_create_kelas_models_table.php dan ubah sintaknya menjadi seperti berikut :

<?php

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

return new class extends Migration
{
    /**
     * Run the migrations.
     */
    public function up(): void
    {
        Schema::create('tbl_kelas', function (Blueprint $table) {
            $table->increments('idkelas');
            $table->string('kelas');
            $table->integer('idjurusan');
            $table->timestamps();
            $table->softDeletes();
        });
    }

    /**
     * Reverse the migrations.
     */
    public function down(): void
    {
        Schema::dropIfExists('tbl_kelas');
    }
};

Jalankan migration nya dengan sintak :

php artisan migrate

 

Konfigurasi Seeder Kelas

Selanjutnya buka seeder yang bernama JurusanModelSeeder.php dan ubah sintaknya menjadi seperti berikut :

<?php

namespace Database\Seeders;

use Illuminate\Database\Console\Seeds\WithoutModelEvents;
use Illuminate\Database\Seeder;
use Illuminate\Support\Facades\DB;

use Faker\Factory as Faker;

class KelasModelSeeder extends Seeder
{
    /**
     * Run the database seeds.
     */
    public function run(): void
    {
        $datafaker = Faker::create('id_ID'); 
        for($i = 1; $i <= 50; $i++)
        { 
            // insert data ke table siswa menggunakan Faker 
            DB::table('tbl_kelas')->insert([ 
                'kelas' => $datafaker->words(3, true), 
                'idjurusan' => $datafaker->numberBetween(1, 100),
                ]
            ); 
        }
    }
}

 

Konfigurasi Model Kelas

Karena sebelumnya kita membuat table dengan nama tbl_kelas, kita harus mendeklarasikan protected $table = “tbl_kelas”, supaya tidak dianggap table dengan nama kelas (plural/jamak).

latihan_laravel/app/Models/KelasModel.php :

<?php

namespace App\Models;

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

class KelasModel extends Model
{
    use SoftDeletes;

    protected $table = "tbl_kelas"; 
    protected $primaryKey = "idkelas";
    protected $dates = ['deleted_at'];
    protected $fillable = ['idkelas', 'kelas', 'idjurusan']; 
    
    //relasi ke model tbl_jurusan
    public function relasi_jurusan() 
    { 
        return $this->belongsTo('App\Models\JurusanModel','idjurusan'); 
    }
}

Perhatikan pada model KelasModel.php di atas, kita membuat fungsi untuk memberitahukan ke sistem bahwa kita akan membuat relasi One ke model JurusanModel atau table tbl_jurusan.

//relasi ke model tbl_jurusan
public function relasi_jurusan() 
{ 
    return $this->belongsTo('App\Models\JurusanModel','idjurusan'); 
}

Kita mendeklarasikan table/model KelasModel ini dengan model/table JurusanModel, menggunakan fungsi return $this->belongsTo(‘App\Models\JurusanModel’,’idjurusan’);, yang berarti kita memberitahukan bahwa kelas mempunyai 1 jurusan, dengan nama field yang ada pada table tbl_jurusan dengan nama ‘idjurusan’ yang di relasikan dengan table tbl_kelas.

 

Membuat Controller Jurusan

Buat controller JurusanController.php.

php artisan make:controller JurusanController

Selanjutnya, kita akan mencoba menampilkan hasil dari contoh relasi one to many eloquent laravel ini, buat sebuah route baru.

latihan_laravel/routes/web.php :

Route::get('/jurusan', [JurusanController::class,'index']);

Route yang kita buat ini akan menjalankan method index() pada controller JurusanController. Selanjutnya buat method index() di dalamnya.

latihan_laravel/app/Http/controllers/JurusanController.php :

<?php

namespace App\Http\Controllers;

use App\Models\JurusanModel;
use Illuminate\Http\Request;

class JurusanController extends Controller
{
    public function index() 
    { 
        // mengambil semua data jurusan 
        $datajurusan = JurusanModel::all(); 
        
        // return data ke view 
        return view('jurusan/v_jurusan', ['var_jurusan' => $datajurusan]); 
    }
}

Perhatikan pada method index() di atas, kita mencoba mengambil semua data dari table jurusan melalui model Jurusan dan kita passing datanya ke view v_jurusan.blade.php yang ada dalam folder jurusan.

Pada view v_jurusan.blade.php akan kita tampilkan semua data jurusan, lengkap dengan kelasnya masing-masing yang sudah kita hubungkan relasinya pada model JurusanModel.php dan model KelasModel.php.

Selanjutnya kita buat folder jurusan di dalam folder latihan_laravel/resources/views/, kemudian buat view v_jurusan.blade.php di dalamnya.

latihan_laravel/resources/views/jurusan/v_jurusan.blade.php :

<!DOCTYPE html>
<html>
    <head>
        <title>Tutorial Laravel : Relasi One To Many Eloquent</title>
        <link href="https://stackpath.bootstrapcdn.com/bootstrap/4.2.1/css/bootstrap.min.css" rel="stylesheet">
    </head>

    <body>
        <div class="container">
            <div class="card mt-5">
                <div class="card-body">
                    <h3 class="text-center"><a href="https://www.agussuratna.net">www.agussuratna.net</a></h3>
                    <h5 class="text-center my-4">Eloquent One To Many Relationship</h5>
                    <table class="table table-bordered table-striped">
                        <thead>
                            <tr>
                                <th class="text-center">ID Jurusan</th>
                                <th class="text-center">Jurusan</th>
                                <th class="text-center">Kelas</th>
                                <th class="text-center">Jumlah Kelas</th>
                            </tr>
                        </thead>

                        <tbody>
                            @foreach ($var_jurusan as $j)
                                <tr>
                                    <td>{{ $j->idjurusan}}</td>
                                    <td>{{ $j->jurusan }}</td>
                                    <td>
                                        <ul>
                                            @foreach ($j->relasi_kelas as $k)
                                                <li>{{ $k->kelas }}</li>
                                            @endforeach
                                        </ul>
                                    </td>

                                    <td class="text-center">{{ $j->relasi_kelas->count() }}</td>
                                </tr>
                            @endforeach
                        </tbody>
                    </table>
                </div>
            </div>
        </div>
    </body>
</html>

Kita lihat hasilnya dengan cara mengakses ke alamat localhost:8000/jurusan

Perhatikan sintak di atas, kita bisa langsung mengakses data kelas untuk masing-masing jurusan.

<td>
    <ul>
        @foreach ($j->relasi_kelas as $k)
            <li>{{ $k->kelas }}</li>
        @endforeach
    </ul>
</td>

<td class="text-center">{{ $j->relasi_kelas->count() }}</td>

Untuk menghitung jumlah kelas masing-masing jurusan, kita bisa langsung menggunakan fungsi count() seperti yang ada pada contoh di atas.

Demikian tutorial mengenai Relasi Database dengan Eloquent, untuk referensi tentang relasi Eloquent pada Laravel bisa dibaca di dokumentasi Laravel .

Jika ada pertanyaan silahkan tuliskan di kolom komentar, semoga bermanfaat. Selanjutnya kita akan mempelajari tentang Upload dan Hapus File pada Laravel .

 

 

Referensi :

  • https://informatika.uc.ac.id/id/2019/12/laravel-database-relationship/

Related Post

Be the first to comment

Leave a Reply

Your email address will not be published.


*


error: Ga bisa dicopy