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); } } |
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')); } ... } |
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> |
Saya ga bisa masukin class hasfactory min, saya pake laravel 7
BalasHapusapakah perlu install package?
Trying to get property 'position_name' of non-object, ini kenapa yah mas?
Hapusini pake laravel 8 mas
BalasHapusIya
HapusTerima kasih tutorialnya, mas. Mau nanya, kalau diimplementasikan pada fungsi edit gimana ya caranya ?
BalasHapusSama saja, tinggal di tambahkan attribute selected samadengan true jika id samadengan id value yang aktif
Hapusbisa tolong contohkan min?
Hapuskok ngga keluar ya min?
BalasHapusklo autofill form input dari form select gimana gan ? makasih
BalasHapushasil akhirnya mana bro?
BalasHapus