Tutorial Laravel, Cara Membuat Select Option Ambil Data Dari Tabel Database

Tutorial Laravel, Cara Membuat Select Option Ambil Data Dari Tabel Database

Assalamualaikum, kali ini akan kita bahas cara memuat select option dengan data yang berasal dari table database. Dalam kasus ini, biasanya terjadi pada data tabel yang memiliki relasi One to Many, atau bahkan bisa saja terjadi pada relasi One to One atau Many to Many.

Namun pada contoh tutorial ini, kita menggunakan relasi One to Many. Kita akan menggunakan projek CRUD Laravel 8 yang pernah kita bahas sebelumnya. Namun jika kalian kesini untuk mencari solusi atas masalah dari projek kalian sendiri juga tidak masalah. Jika kalian sudah paham tentang dasar dan logika pemrograman (OOP, MVC, ORM Laravel) pasti akan lebih mudah.

Jadi pada kasus ini ceritanya tiap user akan memiliki posisi, dan satu posisi dapat dimiliki oleh banyak user (One to Many). Hal pertama yang harus kita lakukan, karena kita sudah membuat tabel user, maka tambahkan kolom position_id yang merupakan foreign key dari id position. Cara menambahkan kolom menggunakan migrasi pada laravel silahkan cek disini. Atau kalau kalian ingin menambahkan langsung ke database kalian juga silahkan, tapi saran saya gunakan migrasi. Kemudian buat tabel position yang berisi kolom id dan position_name.

Jika sudah, maka seharusnya kalian sudah memiliki tabel seperti berikut

            

Setelah selesai membuat tabel di atas, langung ke kodingannya, buat file Model untuk tabel position, kemudian buat kodenya seperti berikut.

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
<?php

namespace App\Models;

use Illuminate\Database\Eloquent\Factories\HasFactory;
use Illuminate\Database\Eloquent\Model;

class Position extends Model
{
    use HasFactory;

    protected $fillable = [
        'position_name',
    ];

    public function user()
    {

        return $this->hasMany(User::class);
    }
}

Nah disitu ada fungsi user yang artinya satu posisi bisa dimiliki banyak user, pada laravel 8 penulisan relasinya ya seperti di atas, namun untuk versi dibawahnya, bisa juga ditulis seperti ini 

return $this->hasMany('App\Models\Position');

Selanjutnya pada UserController bagian fungsi create tambahkan kode berikut

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
<?php

namespace App\Http\Controllers;

use App\Models\User;
use App\Models\Position;
use Illuminate\Http\Request;


class UserController extends Controller
{
    ...

    public function create()
    {
        $positions = Position::all();
        return view('users.create', compact('positions'));
    }

    ...
}

Ingat, jangan lupa import Model Position, kemudian kan fungsi create ini kita gunakan untuk saat melakukan ata menuju halaman tambah data user, nah disini kita membawa Model position untuk menampilkan data position pada halaman tersebut.
Cara menampilkan nya seperti berikut, buka file view create.blade.php dan tambahkan kode berikut.

1
2
3
4
5
6
7
8
 <div class="form-group">
    <label for="position-option">Posisi</label>
    <select class="form-control" id="position-option" name="position_id">
       @foreach ($positions as $position)
          <option value="{{ $position->id }}">{{ $position->position_name }}</option>
       @endforeach
    </select>
 </div>

Dan jika kalian ingin menampilkan nya di table, kalian tinggal panggil seperti ini

<td>{{ $user->position->position_name }}</td>

Gimana? mudah kan, selamat mencoba, jika ada yang bingung silahkan tanyakan dikolom komentar ya, sekian semoga bermanfaat, wassalamualaikum wr. wb.

Posting Komentar

2 Komentar

  1. Saya ga bisa masukin class hasfactory min, saya pake laravel 7

    apakah perlu install package?

    BalasHapus
    Balasan
    1. Trying to get property 'position_name' of non-object, ini kenapa yah mas?

      Hapus